Golang で静的バイナリを作成するためのフラグ
Docker スクラッチ ベースを使用して Golang で静的バイナリを構築する場合は、両方の CGO_ENABLED を含めることが重要です=0 および -ldflags '-extldflags "-static"' フラグ。どちらのオプションも冗長に見えるかもしれませんが、静的バイナリを実現する上で異なる役割を果たします。
CGO_ENABLED=0
このフラグは、Go ランタイムでの C コードの使用を無効にします。 CGO (C Go) を使用すると、Go プログラム内の C コードとのインターフェイスが可能になります。 CGO_ENABLED=0 を設定すると、Go が C ライブラリとリンクしようとするのを防ぎ、ビルドされたバイナリが自己完結するようにします。
-ldflags '-extldflags "-static"'
このフラグは、外部ライブラリをリンクするときに -static オプションを使用するようにリンカーに指示します。 -static は、すべての依存関係がランタイム環境に存在することに依存するのではなく、バイナリ内に静的にすべての依存関係を含めるようリンカーに指示します。これにより、ランタイム ライブラリの検索の必要性がなくなり、バイナリが外部ライブラリの可用性から独立したものになります。
両方のフラグを組み合わせることで、ビルドされたバイナリが完全に静的になり、Go ランタイムと必要な外部依存関係の両方が含まれるようになります。その実行可能コード。これにより、追加のランタイム コンポーネントや動的リンクを必要とせずに、バイナリをあらゆる環境で実行できるようになります。
以上がDocker Scratch を使用して Golang で静的バイナリを作成する方法: CGO_ENABLED=0 および -ldflags?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。