理解內部包
內部包,由「internal」目錄表示,旨在將不應在專案外部公開的相關程式碼進行分組。在 Go 模組中,內部套件不能被外部專案匯入。
模組結構
在提供的範例中,專案結構如下:
project/ internal/ foo/ foo.go # package foo bar/ bar.go # package bar main.go
main.go 導入內部套件project/internal/foo和project/internal/bar.
匯入問題
您遇到的問題是嘗試從專案目錄外部匯入內部套件。內部套件只能從同一個專案匯入,因此使用 main.go 中的路徑project/internal/foo 和project/internal/bar 是行不通的。
Go 模組的解決方案
但是,隨著 Go v1.11 中引入 Go 模組,不再需要在 $GOPATH/src 中指定專案路徑。建立 go.mod 檔案並定義內部套件模組,如下所示:
project/ go.mod main.go \---internal +---bar | bar.go | go.mod | \---foo foo.go go.mod
project/internal/bar/go.mod
module bar go 1.14
project/internal/bar/bar.go
package bar import "fmt" // Bar prints "Hello from Bar" func Bar() { fmt.Println("Hello from Bar") }
project/internal/foo/go.mod
module foo go 1.14
project/internal/foo/foo.go
package foo import "fmt" // Foo prints "Hello from Foo" func Foo() { fmt.Println("Hello from Foo") }
project/main.go
package main import ( "internal/bar" "internal/foo" ) func main() { bar.Bar() foo.Foo() }
project/go.mod
module project go 1.14 require internal/bar v1.0.0 replace internal/bar => ./internal/bar require internal/foo v1.0.0 replace internal/foo => ./internal/foo
以上是Go模組如何處理內部套件以防止外部導入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!