【发布时间】:2020-10-20 12:33:01
【问题描述】:
注意这个问题是关于 Go 语言规范而不是最佳实践或建议。
看了很多关于包的文章,还是不太明白目录和包名的关系。这是我的例子。
我的项目结构如下图所示。当我执行go run ~/go/src/myproj/main.go 时,错误提示:
src\myproj\main.go:5:2: 在以下任何一个中都找不到包“myproj/pa/pb”: c:\go\src\myproj\pa\pb(来自 $GOROOT) C:\Users\terry\go\src\myproj\pa\pb(来自 $GOPATH)
但是,如果我在 p.go 中将 package pb 更改为 package pa,并将导入从 "myproj/pa/pb" 更改为 "myproj/pa",并在 main.go 中将 fmt.Print(pb.Greet) 更改为 fmt.Print(pa.Greet),它将起作用。最里面的目录是否必须与包声明名称匹配?我的 go 版本是 1.14.4
【问题讨论】:
-
"最里面的目录是否必须与包声明名称匹配?"不,当然不。但这是一个非常 明智 约定,你永远不应该打破它,因为如果你这样做,人们会(理所当然地)恨你。
标签: go