使用不同的包和資料夾名稱

使用資料夾名稱以外的包名稱是完全正常的。如果我們這樣做,我們仍然必須根據目錄結構匯入包,但是在匯入之後我們必須通過我們在 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 識別符號作為資料夾名稱,因此你無法將軟體包命名為語言規範允許的內容。

可以選擇使用與其包含資料夾不同的軟體包名稱,你可以選擇真正命名軟體包規範允許的軟體包,無論底層操作和檔案系統如何。