Go の厳格なパッケージ可視性ルールは、API サーフェスを明確に定義し、明確に保つことを目的としています。ただし、プロジェクトが成長するときに、実装の詳細を外部の利用者に公開せずに、より小さなパッケージ内にカプセル化することは不可能です。
このジレンマに対する 1 つの解決策は、Go 1.4 で提案されました。それは、「内部」パッケージを導入することです。
「内部」パッケージは、同じツリー内の他のパッケージによってのみインポートできます。このルールは、パブリック パッケージと内部パッケージを明確に分離し、内部実装の詳細が誤って公開されることを防ぐことを目的としています。
親ツリーの外部から内部パッケージをインポートしようとすると、次のような結果になります。エラー:
import ( "runtime/internal/atomic" "runtime/internal/sys" )
エラー:
ランタイム/内部/アトミックをインポートします: 内部パッケージは使用されていませんallowed
メイン パッケージで内部関数を使用するという問題は、実装の詳細を分離しておきたいという要望から生じます。残念ながら、これは内部パッケージの使用目的ではありません。
実装の詳細を内部パッケージ内にカプセル化することは、Go では現実的ではありません。代わりに、コードベースを、明確に定義されたパブリック インターフェイスを持つ個別のモジュールにリファクタリングすることを検討してください。このアプローチは、Go が強調する明確な API 境界と一致しており、コードの保守性と拡張性を促進します。
以上がGo の内部パッケージは本当に実装の詳細をカプセル化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。