Skip to main content

Get full access to 実用 Go言語 ―システム開発の現場で知っておきたいアドバイス and 60K+ other titles, with a free 10-day trial of O'Reilly.

There are also live events, courses curated by job role, and more.

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

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

Get 実用 Go言語 ―システム開発の現場で知っておきたいアドバイス now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.

Don’t leave empty-handed

Get Mark Richards’s Software Architecture Patterns ebook to better understand how to design components—and how they should interact.

It’s yours, free.

Get it now
Cover of Software Architecture Patterns

Check it out now on O’Reilly

Dive in for free with a 10-day trial of the O’Reilly learning platform—then explore all the other resources our members count on to build skills and solve problems every day.

Start your free trial Become a member now