CGO_ENABLED=0 を Go バイナリのデフォルトにしないのはなぜですか?
デフォルトでは、Go では CGO_ENABLED は 1 に設定されます。これは、Go バイナリが、GLIBC によって提供されるネイティブ ライブラリなどのネイティブ ライブラリと動的にリンクできることを意味します。これにより、ビルドとランタイムの高速化と小型化が可能になります。
ただし、GLIBC アップデートとディストリビューションの間で重大な変更が発生する可能性など、CGO の使用にはいくつかの欠点もあります。さらに、CGO 対応バイナリは、異なるプラットフォーム間で移植できない場合があります。
では、なぜ CGO_ENABLED=0 がデフォルトではないのでしょうか?理由はいくつかあります:
標準ライブラリの動作
特定の標準ライブラリ関数の動作も異なる場合があります。 CGO が有効かどうかによって異なります。例:
展開に関する考慮事項
CGO_ENABLED=1 バイナリのサイズは小さくなりますが、ホスト OS の展開も必要です。これにより、展開プロセスのサイズが大幅に増加し、複雑さが増す可能性があります。一方、CGO_ENABLED=0 バイナリは、外部ライブラリに依存せずにデプロイできます。
結論
CGO を有効にするかどうかの決定は、次の条件によって決まります。 Go プログラムの特定の要件。主に標準ライブラリを使用しており、ネイティブ コードにアクセスする必要がない場合は、CGO_ENABLED=0 が適切なオプションです。それ以外の場合、CGO_ENABLED=1 にすると、ローカル開発にパフォーマンスと利便性の利点がもたらされます。
以上がCGO_ENABLED=0 を Go バイナリのデフォルトにしないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。