go vet
Goに標準搭載されている静的解析コマンド。「コンパイラは通るが疑わしい構造」(Printfのフォーマット文字列と引数の不一致など)を報告する。ヒューリスティックベースなので、すべての報告が本物の問題であることは保証されない(公式ドキュメントも「ガイダンスとして使うべき」としている)。
go vet ./... # パッケージを検査
go tool vet help # 利用可能なチェック一覧
go tool vet help printf # 特定チェックの詳細
デフォルトで全チェックが実行される。-printf=trueのように特定のチェックだけを明示すると、それ以外は無効になる。問題が見つかると非0で終了する。
チェックの例(全31種)
- printf: フォーマット文字列と引数の整合性
- copylocks: ロック(
sync.Mutex等)を値渡ししていないか - loopclosure: ネストした関数からのループ変数参照
- lostcancel:
context.WithCancelのcancel関数の呼び忘れ - unreachable: 到達不能コード
- structtag: structタグの構文
- stdversion: go.modの
godirectiveより新しい標準ライブラリシンボルの使用(go directiveと最小サポートバージョンの整合性チェックに使える)
Goの開発ツーリングの中での位置づけ
追加インストール不要の標準ツールとしての最小限のlint。より広範なチェックはstaticcheck(go vetと同様のインターフェースを持つ)やgolangci-lint(govetを同梱)が担う。