Goでビルドされたバイナリには、使用された依存関係やビルド設定の情報が埋め込まれている。go version -m コマンドを使うと、ソースコードがなくてもバイナリからこれらの情報を抽出できる。
用途
- 本番環境で動いているバイナリの依存関係を確認
- 脆弱性のあるライブラリが含まれていないかチェック
- ビルド時の設定(GOOS, GOARCHなど)の確認
- バイナリがどのコミットからビルドされたか特定
使い方
go version -m <バイナリパス>出力の見方
出力は複数のセクションに分かれている。
| プレフィックス | 意味 |
|---|---|
path | モジュールのインポートパス |
mod | メインモジュール。(devel) はローカルビルドを示す |
dep | 依存モジュール。バージョンとチェックサムが含まれる |
build | ビルド時の設定やVCS情報 |
build セクションの主要な項目:
| キー | 説明 |
|---|---|
-compiler | 使用したコンパイラ(通常 gc) |
CGO_ENABLED | CGOの有効/無効 |
GOOS / GOARCH | ターゲットOS/アーキテクチャ |
vcs.revision | ビルド元のコミットハッシュ |
vcs.time | コミットのタイムスタンプ |
vcs.modified | 未コミットの変更があったか |
実行例
go version -m ./output./output: go1.19 path github.com/mktbsh/output mod github.com/mktbsh/output (devel) dep github.com/aws/aws-lambda-go v1.34.1 h1:M3a/uFYBjii+... dep github.com/labstack/echo/v4 v4.7.2 h1:Kv2/p8OaQ+M6... ... build -compiler=gc build CGO_ENABLED=0 build GOARCH=amd64 build GOOS=linux build vcs.revision=39792fdacec6dc82b3f6335cb6b921c138f37625 build vcs.time=2022-08-18T08:50:08Z build vcs.modified=trueこの例では、Linux/amd64向けにビルドされ、CGOは無効、コミット 39792fd... からビルドされたが未コミットの変更があった(vcs.modified=true)ことがわかる。
関連
go version- Goのバージョン確認go list -m all- ソースコードから依存関係を一覧表示
hsb.horse