CGO_ENABLED=0 でコンパイルすると速度が低下する理由
C バインディングを利用していないにもかかわらず、CGO_ENABLED=0 でコンパイルすると著しく速度が低下します。その原因を理解するには、動作しているメカニズムを詳しく調べる必要があります。
標準ライブラリ パッケージは、事前に決定されたコンパイル フラグを使用して構築されます。 CGO_ENABLED が 0 に設定されている場合、ビルド フラグが変更され、事前にビルドされたパッケージが互換性がなくなります。その結果、標準ライブラリの大部分を再ビルドする必要があります。
「go build -i」は新しいフラグでビルドされたパッケージをインストールできますが、問題を完全に解決するわけではありません。 CGO_ENABLED=0 でビルドされたパッケージをインストールすると、同じフラグを使用して今後のビルドが高速化されますが、フラグを使用しない場合のビルドは妨げられます。
事前ビルドされたパッケージのデフォルトのインストール方法は、すべてのパッケージが同一のディレクトリに保存されるため非効率的です。ビルド構成に関係なく名前が付けられます。さまざまなフラグを使用して高速ビルドを有効にするには、「go build -i」を「-installsuffix」または「-pkgdir」フラグと組み合わせる必要があります。各コンパイル モードに固有のディレクトリを割り当てることで、異なるフラグを持つ個別のビルドにシームレスに対応できます。
以上がCGO を無効にすると、C バインディングを使用しなくてもコンパイルが遅くなるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。