7.4 よく使われるビルドフラグ

Goは go build としてビルドするときは、さまざまなフラグを用いてビルドできます。本節では本番環境向けにビルドするときに明日から使えるオプションを紹介します。以下のプログラムをビルドすることを考えてみます。

package main

import "fmt"

var version string

func main() {
	fmt.Printf("Hello 世界, version = %s", version)
}

本番環境向けにビルドするとき、以下のようにオプションを付与してビルドできます。

$ CGO_ENABLED=0 go build -trimpath -ldflags '-s -w -X main.version=1.0.0' main.go

それぞれのオプションがどのようなものなのか説明します。

7.4.1 バイナリサイズを小さくする

Goではランタイムに合わせたシングルバイナリを作成できます。本番環境用に配布する実行バイナリは小さいに越したことはありません。go build 時に-ldflags フラグを付与し go build -ldflags '-s -w' main.go などとしてビルドすることで、バイナリサイズを小さくできます。

筆者の環境でビルドしたところ、以下のような違いがありました。

package main

import "fmt"

func main() {
	fmt.Println("Hello 世界")
}
表7-1: フラグの有無によるバイナリサイズの違い

-ldflags フラグなし

-ldflags フラグ あり

1.9MiB

1.3MiB

フラグを付与するだけでバイナリサイズが小さくなるので、本番環境向けのビルドは積極的に ...