使用不同的包和資料夾名稱
使用資料夾名稱以外的包名稱是完全正常的。如果我們這樣做,我們仍然必須根據目錄結構匯入包,但是在匯入之後我們必須通過我們在 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 識別符號作為資料夾名稱,因此你無法將軟體包命名為語言規範允許的內容。
可以選擇使用與其包含資料夾不同的軟體包名稱,你可以選擇真正命名軟體包規範允許的軟體包,無論底層操作和檔案系統如何。