内部パッケージについて
内部パッケージ (「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/ソース。 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 中国語 Web サイトの他の関連記事を参照してください。