go build の成果物のバージョン情報を取得する

go buildでビルドしたバイナリのバージョン情報を取得するには、runtime/debugパッケージのReadBuildInfo()関数を使用する。

info, ok = debug.ReadBuildInfo()BuildInfoオブジェクトを取得し、info.Main.Versionでバージョン情報を参照できる。

package main

import (
	"fmt"
	"runtime/debug"
)

func main() {
	if info, ok := debug.ReadBuildInfo(); ok {
		fmt.Printf("Version: %s\n", info.Main.Version)
	} else {
		fmt.Println("No build info available")
	}
}

バージョン情報の確認

上記のコードをversion-test.goとして保存し、以下のコマンドでビルドし実行する。

go build -o version-test version-test.go

./version-test
Version: (devel)

Gitで管理していない場合、バージョン情報は(devel)となる。

Gitでタグを付けたバージョン情報の反映

gitでタグをつけるとバージョンが付く。

git init
git commit --allow-empty -m "Initial commit"
git tag v1.0.0

再度ビルドし実行する。

go build -o version-test version-test.go
./version-test
Version: v1.0.0

開発中のバージョン情報

タグのついたバージョンからコミットが進んでいる場合、バージョン情報にビルド日時と現在のコミットIDが付与される。

echo "// dummy change" >> version-test.go
git add version-test.go
git commit -m "Update version-test.go"
go build -o version-test version-test.go
./version-test
Version: v1.0.0-0.20260101055640-bddc39b7927b

また、コミットされていない変更がある場合はさらに+dirtyが付与される。

echo "// another change" >> version-test.go
go build -o version-test version-test.go
./version-test
Version: v1.0.0-0.20260101055640-bddc39b7927b+dirty