CGO_ENABLED=0 でシェル コマンドをコンパイルする: パフォーマンスのボトルネック
Go プログラムでネットワーク操作を利用する場合、コンパイル プロセスで重大な問題が発生する可能性があります。 CGO_ENABLED=0 で速度が低下します。この動作は、基本的な HTTP サーバーなどの最小限のプログラムでも観察され、CGO_ENABLED=0 を使用しない場合のコンパイルは、CGO_ENABLED=0 を有効にした場合よりも約 9 倍の時間がかかります。
速度低下の根本原因
この速度低下の原因は、標準ライブラリ パッケージがカスタム フラグなしで事前にビルドされているという事実にあります。 CGO_ENABLED が 0 に設定されると、ビルド フラグが変更されます。その結果、事前に構築されたパッケージを利用できなくなり、標準ライブラリの大部分が再コンパイルされることになります。このプロセスは、事前にビルドされたパッケージを使用するよりも大幅に時間がかかります。
速度低下の軽減
この速度低下を軽減するには、 go build -i フラグを使用します。使用済み。このフラグは、変更されたフラグを使用してビルドされたパッケージをインストールします。ただし、このソリューションの有効性は限られています。CGO_ENABLED=0 を指定すると後続のビルドが高速化され、CGO_ENABLED=0 を指定しないとビルドが遅くなるからです。
より効率的なアプローチには、-installsuffix フラグと -pkgdir フラグを使用してパッケージをインストールするためのカスタム ディレクトリを指定することが含まれます。さまざまなフラグを使用して構築されています。これにより、さまざまなフラグを使用した Go プログラムの高速コンパイルが可能になります。複数のコンパイル モードがある環境では、各モードに独自の指定ディレクトリを設定できるため、すべてのシナリオで効率的なコンパイルが保証されます。
以上がCGO_ENABLED=0 がネットワーク操作で Go コンパイルを遅くするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。