Go パッケージは、複数のモジュールまたはプログラムでよく使用されます。機能の小さなサブセットしか必要としないにもかかわらず、パッケージ全体が最終的に各実行可能ファイルにコンパイルされる可能性があります。その結果、未使用の関数や文字列を含む大きなバイナリが作成される可能性があります。
残念ながら、他のプログラミング言語とは異なり、Go には現在コンパイル時に未使用のコードを明示的に削除する方法がありません。コンパイラは、到達不可能なコードをある程度最適化して削除しますが、明示的に呼び出されない場合でも、潜在的に到達可能な未使用のコードを判断することはできません。
この動作は、次のコードで実証できます。
// play/subplay.go package subplay func A() { fmt.Printf("this is function A()") } func B() { fmt.Printf("secret string") }
メインモジュールでは、subplay パッケージをインポートしますが、関数を呼び出すだけですA():
// main.go package main import "play/subplay" func main() { subplay.A() }
B() が呼び出されないにもかかわらず、文字列「秘密文字列」は結果のバイナリに含まれています。
この質問への回答に記載されているように、回避策の 1 つは、インポートされたパッケージによって導入された依存関係に注意することです。たとえば、net/http をインポートすると、他の 39 個のパッケージもインポートされるため、それらのパッケージがどれも使用されていない場合でも、バイナリ サイズが大幅に増加する可能性があります。
コンパイラは未使用のコードを削除できない場合がありますが、コードを最適化して効率を高めるには依然として不可欠です。不要な関数呼び出しを回避し、データ構造をスリムに保ち、文字列割り当てを最小限に抑えることはすべて、バイナリ サイズの削減に役立ちます。
以上がコンパイル時に Go で未使用のコードを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。