Go/gofmtコマンド
表示
< Go
gofmt
[編集]何をするツールか
[編集]Go の公式コードフォーマッタです。インデント・スペース・括弧の位置など、コードのスタイルを自動的に統一します。
go vet が「バグの可能性」を検出するのに対し、gofmt は「見た目の統一」を行います。
基本的な使い方
[編集]gofmt main.go # フォーマット結果を標準出力に表示 gofmt -w main.go # ファイルを直接書き換える gofmt -w . # カレントディレクトリ以下を全て書き換える
フラグ解説
[編集]-w:ファイルを直接書き換える
[編集]gofmt -w main.go
指定しない場合は標準出力に結果を表示するだけで、ファイルは変更されません。実運用では -w を使うのが一般的です。
-d:差分を表示する
[編集]gofmt -d main.go
diff 形式でフォーマット前後の差分を表示します。ファイルは変更されません。CI でフォーマットチェックをする際に有用です。
-func foo(){ +func foo() {
-l:フォーマットが必要なファイルを列挙する
[編集]gofmt -l .
フォーマットが必要なファイルのパスだけを表示します。CI でのチェックに使います。
# CI でのチェック例 # 出力が空なら全ファイルが整形済み test -z "$(gofmt -l .)"
-s:コードを簡略化する
[編集]gofmt -s -w .
冗長な書き方を簡潔な形に変換します。
// 変換前 s[a:len(s)] → s[a:] []T{T{1}, T{2}} → []T{{1}, {2}} for x, _ = range v → for x = range v
-r:書き換えルールを適用する
[編集]gofmt -r 'a[b:len(a)] -> a[b:]' -w .
旧パターン -> 新パターン の形式で、コード全体に対して書き換えを適用します。簡単なリファクタリングに使えます。
# 関数名の変更 gofmt -r 'OldFunc(a) -> NewFunc(a)' -w . # 型の置き換え gofmt -r 'interface{} -> any' -w .
-e:全エラーを表示する
[編集]gofmt -e main.go
デフォルトでは各行の最初の1つのエラーしか表示されませんが、-e を指定すると全エラーを表示します。
-cpuprofile:CPU プロファイルの書き出し
[編集]gofmt -cpuprofile cpu.prof main.go
gofmt 自体のパフォーマンス計測用です。通常の開発では使いません。
go vet との使い分け
[編集]| ツール | 目的 | 自動修正 |
|---|---|---|
gofmt
|
コードスタイルの統一 | ✅ -w で自動修正
|
go vet
|
バグの可能性の検出 | 一部のみ |
CI での典型的な使い方
[編集]# フォーマットチェック test -z "$(gofmt -l .)" || (echo "要 gofmt" && exit 1) # フォーマット + vet を両方かける gofmt -w . && go vet ./...
まとめ
[編集]| フラグ | 用途 |
|---|---|
-w
|
ファイルを直接書き換える(実運用の基本) |
-d
|
diff 形式で差分表示(ファイル変更なし) |
-l
|
要フォーマットのファイル名を列挙(CI 向け) |
-s
|
冗長な書き方を簡略化 |
-r
|
書き換えルールを適用(簡易リファクタリング) |
-e
|
全エラーを表示 |
Go では gofmt を使うことで、コーディングスタイルの議論に永遠にカロリーを使わずに済むようになりました。インデントはタブかスペースか、括弧はどこに置くか——他の言語では延々と続くこれらの議論が、Go では最初から存在しません。