使用不同的包和文件夹名称
使用文件夹名称以外的包名称是完全正常的。如果我们这样做,我们仍然必须根据目录结构导入包,但是在导入之后我们必须通过我们在 package 子句中使用的名称来引用它。
例如,如果你有一个文件夹 $GOPATH/src/mypck
,在其中我们有一个文件 a.go
:
package apple
const Pi = 3.14
使用这个包:
package main
import (
"mypck"
"fmt"
)
func main() {
fmt.Println(apple.Pi)
}
尽管这有效,但你应该有充分的理由将包名称与文件夹名称分开(或者它可能成为误解和混淆的根源)。
有什么用?
简单。包名称是 Go idetifier :
identifier = letter { letter | unicode_digit } .
这允许在标识符中使用 unicode 字母,例如αβ
是 Go 中的有效标识符。Go 不是处理文件夹和文件名,而是由操作系统处理,不同的文件系统有不同的限制。实际上有许多文件系统不允许所有有效的 Go 标识符作为文件夹名称,因此你无法将软件包命名为语言规范允许的内容。
可以选择使用与其包含文件夹不同的软件包名称,你可以选择真正命名软件包规范允许的软件包,无论底层操作和文件系统如何。