Go 言語(以下 Golang)のソースコードの
mainパッケージで、アプリが利用しているモジュール/外部パッケージのバージョンを取得したい。
「"golang" import パッケージ モジュール バージョン 確認」でググっても、go get するモジュールのバージョン指定しか出てこなかったので、自分のググラビリティとして。
TS; DR (今北産業)
-
runtime/debug パッケージの
debug.ReadBuildInfo()を使いbuildInfo.Depsで依存パッケージ(モジュール)情報からVersionフィールドを参照する。(Go 1.12 以降) -
具体的なコード
package main import ( "fmt" "log" "golang.org/x/xerrors" "runtime/debug" ) func main() { buildInfo, ok := debug.ReadBuildInfo() if !ok { err := xerrors.New("failed to get build info") log.Fatal(err) } for _, modDep := range buildInfo.Deps { fmt.Println("module name:", modDep.Path) fmt.Println("module version:", modDep.Version) } } // Output: // module name: golang.org/x/xerrors // module version: v0.0.0-20200804184101-5ec99f83aff1 -
オンラインで動作をみる @ Go Playground