パッケージでは、ファイルが属するパッケージをマークするために、同じディレクトリ内のすべてのファイルの最初の行に次のコードを追加する必要があります。
package パッケージ名
パッケージの特徴は以下の通りです。
- ディレクトリ内の同じレベルにあるファイルはパッケージに属します。
- パッケージ名はそのディレクトリ名と異なっていてもかまいません。
- main という名前のパッケージはアプリケーションのエントリ パッケージであり、コンパイルされたソース コードに main パッケージが存在しない場合、コンパイルして実行ファイルを出力することができません。
パッケージ システム設計の目的は、理解と更新を容易にするために一連の関連機能を個別のユニットに配置することで、大規模なプログラムの設計とメンテナンスを簡素化し、各ユニットが更新されるときにプログラム内の他のユニットと同じものを維持することです。相対的な独立性。このモジュール機能により、各パッケージを他の異なるプロジェクトで共有して再利用したり、プロジェクトの範囲内またはグローバルに均一に配布したり再利用したりすることができます。
通常、各パッケージは、その中の各識別子にアクセスするための異なる名前空間を定義します。各名前空間は特定のパッケージに関連付けられています。使用するときに名前の他の部分との競合を避けるために、型、関数などには短くて明確な名前を選択してください。
各パッケージは、パッケージ内の名前の可視性とエクスポートを制御することによってカプセル化も実装します。パッケージ メンバーの可視性を制限し、パッケージ API の具体的な実装を非表示にすることにより、パッケージのメンテナは、外部のパッケージ ユーザーに影響を与えることなく、パッケージの内部実装を微調整することができます。パッケージ内の変数の可視性を制限することで、ユーザーは特定の関数を通じて内部変数にアクセスして更新することを強制することもでき、これにより、同時実行時の内部変数と相互排他制約の一貫性が保証されます。
ソース ファイルを変更する場合は、そのソース ファイルに対応するパッケージとそれに依存する他のすべてのパッケージを再コンパイルする必要があります。 Go コンパイラは、最初から構築した場合でも、他のコンパイル言語よりも大幅に高速にコンパイルします。 Go 言語のコンパイル速度が非常に速いのは、主に 3 つの言語機能によるものです。
- まず、コンパイラがパッケージの依存関係を判断するためにソース ファイル全体を読み取って分析する必要がないように、インポートされるすべてのパッケージを各ファイルの先頭で明示的に宣言する必要があります。
- 2 番目の点は、パッケージの循環依存関係を禁止することです。循環依存関係は存在せず、パッケージの依存関係は有向非循環グラフを形成し、各パッケージは独立してコンパイルでき、同時にコンパイルされる可能性が高いためです。
- 3 番目の点は、コンパイルされたパッケージのターゲット ファイルには、パッケージ自体のエクスポート情報が記録されるだけでなく、パッケージの依存関係も記録されることです。したがって、パッケージをコンパイルするとき、コンパイラーは、すべての依存ファイルを走査するのではなく、パッケージを直接インポートする各オブジェクト ファイルを読み取るだけで済みます。