ホームページ  >  記事  >  バックエンド開発  >  依存関係は Go 実行可能ファイルのサイズにどのような影響を与えますか?

依存関係は Go 実行可能ファイルのサイズにどのような影響を与えますか?

DDD
DDDオリジナル
2024-11-17 03:31:03400ブラウズ

How Do Dependencies Affect the Size of a Go Executable?

Go プロジェクトのサイズの決定

独自にインポートされたパッケージである Go プロジェクトのサイズを測定するには、そのフットプリントを評価する方法があります。

1 つの方法は、ライブラリ バイナリが存在する $GOPATH/pkg ディレクトリを調べることです。たとえば、gorilla/mux、gorilla/securecookie、および Gorilla/sessions パッケージをインストールすると、$GOPATH/pkg/darwin_amd64/github.com/gorilla/ ディレクトリにバイナリ サイズが生成されます。

$ cd $GOPATH/pkg/darwin_amd64/github.com/gorilla/
$ du -k *

284 mux.a
128 securecookie.a
128 sessions.a

ただし、ライブラリのサイズは、リンク後の実行可能ファイルのサイズへの影響を示す唯一の指標ではありません。パッケージ内の依存関係により、他のインポートによって共有される場合と共有されない場合がある追加の「荷物」が発生する可能性があります。

この変動性を説明するために、empty.go、http.go、および mux.go の 3 つのプログラムを考えてみましょう。

// empty.go
package main

func main() {}
// http.go
package main

import "net/http"

var _ = http.Serve

func main() {}
// mux.go
package main

import "github.com/gorilla/mux"

var _ = mux.NewRouter

func main() {}

機能的には同等であるにもかかわらず、バイナリ サイズが異なります大幅:

$ du -k *

1028    empty
5812    http
5832    mux

http.go で net/http import を追加するとサイズが劇的に増加しますが、mux.go で Gorilla/mux パッケージを使用してもわずかしか増加しません。

これは、mux パッケージが net/http パッケージに依存しており、その依存関係を継承しているためです。リンカはコンパイル中にこの追加の荷物の一部を削除する可能性がありますが、パッケージの実際のフットプリントを計算するのは簡単ではありません。

結論: パッケージのサブ依存関係を正確に評価するには、パッケージのサブ依存関係を特定することが重要です。実行可能ファイルのサイズに与える影響。パッケージ ライブラリのサイズを単に合計するだけでは、全体像を把握できません。

以上が依存関係は Go 実行可能ファイルのサイズにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。