目录结构
假设我们有以下的目录结构:
project/
│
├── puzzlers/
│ └── article3/
│ └── q2/
│ ├── lib/
│ │ └── demo5_lib.go
│ └── main.go
文件内容
1. demo5_lib.go (位于 puzzlers/article3/q2/lib/)
// demo5_lib.go
package lib5 // 包声明为 lib5
import "fmt"
// Hello 是一个简单的函数,打印一条消息
func Hello() {
fmt.Println("Hello from lib5!")
}在这个文件中,虽然我们声明了包名为 lib5,但它实际上位于 lib 目录下。
2. main.go (位于 puzzlers/article3/q2/)
// main.go
package main
import (
"puzzlers/article3/q2/lib" // 导入路径是 lib
)
func main() {
lib.Hello() // 调用 lib5 包中的 Hello 函数
}解释
-
包声明:
- 在
demo5_lib.go中,包声明为package lib5。这意味着在这个文件中定义的所有函数和类型都属于lib5包。
- 在
-
导入路径:
- 在
main.go中,我们使用import "puzzlers/article3/q2/lib"来导入包。这里的导入路径是基于文件的实际目录结构,而不是包声明的名称。
- 在
-
调用函数:
- 在
main.go中,我们可以通过lib.Hello()来调用demo5_lib.go中的Hello函数。
- 在
运行程序
如果我们在 project/puzzlers/article3/q2/ 目录下运行以下命令:
go run main.go输出结果
Hello from lib5!
总结
- 导入路径:
puzzlers/article3/q2/lib(基于文件的实际位置) - 包名:
lib5(在文件中声明的名称)
这个例子清楚地展示了包的导入路径和包名之间的区别。在 Go 中,导入路径是基于目录结构的,而包名可以根据开发者的需求进行命名。