いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-363 (VCSのリビジョン情報をランタイム時に取得)(runtime/debug.BuildInfo, vcs.revision)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。よく忘れるのでここにメモメモ。。

アプリのヘルプ表示とかで、ビルドされたときのgitのリビジョンを表示したいときがあります。

Go 1.18 で、runtime/debug.BuildInfoBuildSetting が追加されているので、そこから取得できます。

サンプル

package runtimes

import (
    "errors"
    "runtime/debug"

    "github.com/devlights/gomy/output"
)

// DebugBuildInfo は、runtime/debug.ReadBuildInfo() のサンプルです.
//
// # REFERENCES
//   - https://pkg.go.dev/runtime/debug@go1.21.5#ReadBuildInfo
//   - https://pkg.go.dev/runtime/debug@go1.21.5#BuildSetting
func DebugBuildInfo() error {
    //
    // ReadBuildInfo()は、ReadBuildInfo は、実行中のバイナリに埋め込まれたビルド情報を返す.
    // 中にビルド時のGoのバージョンや依存関係、VCSのリビジョンなどが設定されている.
    //

    info, ok := debug.ReadBuildInfo()
    if !ok {
        return errors.New("error: call debug.ReadBuildInfo()")
    }

    output.Stdoutl("[BuildInfo]", info)
    output.StdoutHr()

    output.Stdoutl("[Go Version]", info.GoVersion)
    output.Stdoutl("[Path]", info.Path)

    const revisionKey = "vcs.revision"
    for _, s := range info.Settings {
        if s.Key == revisionKey {
            output.Stdoutl("[revision]", s.Value)
        }
    }

    return nil
}

実行すると以下のような結果になります。

$ task
task: [build] go build .
task: [run] ./try-golang -onetime

ENTER EXAMPLE NAME: runtime_debug_buildinfo

[Name] "runtime_debug_buildinfo"
[BuildInfo]          go go1.21.5
path    github.com/devlights/try-golang
mod     github.com/devlights/try-golang (devel)
dep     github.com/devlights/gomy       v0.6.0  h1:7BT8bSxr+ZeNkgEYNufuM2rSc6kIoN6g2FSZvrcT9zw=
dep     github.com/pelletier/go-toml/v2 v2.1.1  h1:LWAJwfNvjQZCFIDKWYQaM62NcYeYViCmWIwmOStowAI=
dep     github.com/shopspring/decimal   v1.3.1  h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
dep     golang.org/x/crypto     v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
dep     golang.org/x/exp        v0.0.0-20231206192017-f3f8817b8deb      h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8=
dep     golang.org/x/sync       v0.5.0  h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
dep     golang.org/x/sys        v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
dep     golang.org/x/term       v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
dep     golang.org/x/text       v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
dep     gopkg.in/yaml.v3        v3.0.1  h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
build   -buildmode=exe
build   -compiler=gc
build   CGO_ENABLED=1
build   CGO_CFLAGS=
build   CGO_CPPFLAGS=
build   CGO_CXXFLAGS=
build   CGO_LDFLAGS=
build   GOARCH=amd64
build   GOOS=linux
build   GOAMD64=v1
build   vcs=git
build   vcs.revision=d11f13942220108e09f35d207f82c3ddd8d36e88
build   vcs.time=2023-12-18T05:48:40Z
build   vcs.modified=false

-------------------------------------------------- 
[Go Version]         go1.21.5
[Path]               github.com/devlights/try-golang
[revision]           d11f13942220108e09f35d207f82c3ddd8d36e88


[Elapsed] 153.14µs

参考情報

Goのおすすめ書籍

上の書籍の日本語版が下です。


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。