4 回答

TA貢獻1995條經驗 獲得超2個贊
在 go 中,約定是包的名稱應該與其源目錄的名稱相同。
另一個約定是包名是其源目錄的基名;src/encoding/base64 中的包被導入為“encoding/base64”,但名稱為 base64,不是 encoding_base64,也不是 encodingBase64。
這具有單個目錄僅包含一個包的效果。它在圍棋中是如此基礎,您可以將其視為固定規則,盡管從技術上講,它只是一個約定。

TA貢獻1860條經驗 獲得超9個贊
在 Go 中,包名必須與最里面的目錄名相同嗎?
它不必相同,但它是一個常見的約定。除非你有充分的理由,否則你不應該偏離它。
如果你想要一個不同的包名和目錄名,你可以在文件的包子句中使用 import 注釋。
package <package_name> // import "<import_path>"
這很有用,您的文件結構不利于描述性名稱,例如,如果在文件路徑中使用多個版本。
例如,Google 的客戶端 SDK 使用如下路徑:
包裹名字:
slides
導入路徑:
google.golang.org/api/slides/v1
為了支持這一點,文件的包子句如下:
package slides // import "google.golang.org/api/slides/v1"
這樣一來,在調用代碼中就可以進行如下操作,看起來合情合理。
package main
import(
"google.golang.org/api/slides/v1"
)
func main() {
fmt.Println(slides.PresentationsScope)
}
在此處查看更多信息:https ://github.com/googleapis/google-api-go-client/blob/master/slides/v1/slides-gen.go
在此處的示例中,您將使用:
package pb // import "myproj/pa"
如果您不使用包子句方法,編輯器可能會自動為您的代碼添加別名,例如:
import pb "myprog/pa"

TA貢獻1813條經驗 獲得超2個贊
包名不必是包目錄的基礎。go 工具 goimports 在清理源文件的導入時,實際上會采用包名稱并將其顯示為導入的別名,如果它與基礎不匹配 - 使導入代碼看起來更有意義但別名不是必需的 - 沒有它,文件將編譯。查看包的 AST 時, *types.Package 有一個 Name 方法,它返回包名。當使用 golang.org/x/tools/go/packages.Load 函數加載包時,返回的 *packages.Package 有一個 Name 屬性,該屬性也返回包名。這在按程序生成代碼時非常有用。

TA貢獻1863條經驗 獲得超2個贊
經過一些試驗和錯誤,我發現了發生了什么。包名稱必須與最里面的目錄名稱相同?不。
main.go只需執行以下操作即可。
package main
import (
"fmt"
"myproj/pa"
)
func main() {
fmt.Print(pb.Greet)
}
我們也可以給它一個別名,如下所示也可以。
package main
import (
"fmt"
pc "myproj/pa"
)
func main() {
fmt.Print(pc.Greet)
}
所以這意味著,go 中的 package 是一個帶有package xxx聲明的文件目錄。目錄名稱在導入過程中很重要。該目錄是導入路徑的一部分。但是在導入的文件中使用的是 xxx inpackage xxx或該 xxx 的別名。
當然,不建議做這種事情,但最好的做法還是不要這樣做來迷惑人。
- 4 回答
- 0 關注
- 792 瀏覽
添加回答
舉報