ホームページ > バックエンド開発 > Golang > コンパイル時に Go で未使用のコードを削除するにはどうすればよいですか?

コンパイル時に Go で未使用のコードを削除するにはどうすればよいですか?

DDD
リリース: 2024-12-31 07:06:10
オリジナル
752 人が閲覧しました

How Can I Remove Unused Code in Go at Compile Time?

コンパイル時に Go で未使用のコードを削除する

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート