【发布时间】:2017-09-20 15:33:02
【问题描述】:
查看这个实验。
~/go/src$ tree -F
.
├── 1-foodir/
│ └── 2-foofile.go
└── demo.go
1 directory, 2 files
~/go/src$ cat demo.go
package main
import (
"fmt"
"1-foodir"
)
func main() {
fmt.Println(foopkg.FooFunc())
}
~/go/src$ cat 1-foodir/2-foofile.go
package foopkg
func FooFunc() string {
return "FooFunc"
}
~/go/src$ GOPATH=~/go go run demo.go
FooFunc
我认为我们总是导入一个包名。但是上面的例子
显示我们实际上导入了一个包目录名("1-foodir")
但是在该包中调用导出的名称时,我们使用
Go 文件中声明的包名 (foopkg.FooFunc)。
这对于像我这样来自 Java 和 Python 世界的初学者来说是很困惑的, 其中目录名称本身是用于限定的包名称 包中定义的模块/类。
为什么我们使用import语句的方式和
引用 Go 中包中定义的名称?你能解释一下规则吗
Go 背后的这些事情?
【问题讨论】: