Go言語: ビルド時にバージョン情報を埋め込みたい

  • 63
    Like
  • 0
    Comment
More than 1 year has passed since last update.

課題

  • Goでアプリケーションを作るとき、バージョン番号をコードに含めるのにいちいち書き換えてている…。

解決策

  • ビルドの引数に -ldflags "-X main.version=バージョン" をつける。

やりかた

バージョンを代入する変数を一つ作る。

app.go
package main

var version string // 文字列型でバージョンを宣言する

func main() {
    println("version: " + version)
}

ビルド時に -ldflags をつけて実行する。

$ go build -ldflags "-X main.version 1.0.0" app.go

ビルドされたアプリを実行してみると、変数 version1.0.0 が代入されているのが分かる。

$ ./app
version: 1.0.0

-ldflags-X で与える引数は パッケージ名.変数名 であればなんでも使えるので、バージョン情報だけでなく、ちょっとした設定値やソースコードには含めたくないけど、ビルドには含んでおきたい情報などを埋め込むのにも使える。

なお、静的ファイルのような大きいデータを含める場合は -ldflags ではなく、jteeuwen/go-bindata を使ったほうがビルドしやすいかもしれない。