Go: コンパイル時に未使用のコードを削除する
Go 開発では、インポートされたパッケージの未使用のコードがコンパイルされる状況によく遭遇します。バイナリが含まれるため、ファイル サイズが大きくなります。これは、特にバイナリ サイズが重要な小規模なユーティリティやプログラムの場合、望ましくない場合があります。
Go コンパイラー
Go コンパイラーは、コードを最適化し、未使用の部分を除外するように設計されています。パッケージから。これは、すべてのコードを含むパッケージ ファイル (.a) を作成することで実現されます。リンク プロセス中、Go ツールは必要なコードのみを実行可能バイナリに選択的に組み込み、到達不可能な部分や未使用の部分は除外します。
例: 未使用の関数の削除
次の例を考えてみましょう:
// main.go package main import "play/subplay" func main() { subplay.A() // Call function A() }
// play/subplay.go package subplay func A() { fmt.Printf("this is function A()") } func B() { fmt.Printf("secret string") }
この例では、関数B() はメイン パッケージでは呼び出されませんが、最終バイナリには引き続き表示されます。これは、サブプレイ パッケージが fmt とそのすべての依存関係を含むパッケージを再帰的にインポートするためです。
未使用コードのアドレス指定
この問題を解決するために、Go コンパイラーは次の原則に依存しています。到達可能性分析の。呼び出されるか参照されるコードを識別し、それらの部分のみをバイナリに含めます。関数がプログラム内のどこにも呼び出されない場合、その関数は実行可能ファイルにコンパイルされません。
したがって、未使用のコードを削除する鍵となるのは、インポートされたパッケージ内の関数と変数が実際にプログラムで使用されていることを確認することです。そうでない場合は、ソース コードからそれらを削除するだけで、バイナリからも削除されるはずです。
結論
Go のコンパイラは、バイナリから未使用のコードを効果的に除外し、インポートされたパッケージを慎重に使用し、不要な依存関係を回避することで、バイナリ サイズを最小限に抑えることができます。この動作を理解し、コードの到達可能性を最適化すると、Go アプリケーションのパフォーマンスと効率を大幅に向上させることができます。
以上がGo コンパイラーはコンパイル中に未使用のコードをどのように削除しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。