概要
Go言語勉強中です。これも忘れないようメモ。基本的なことばかりですが・・w
go fmt をプロジェクト配下の全ファイルに一発で適用したいって話です。
勉強になったのは、以下の内容。
ソース構成
以下のようになってるとします。
$ tree
.
├── go.mod
├── main.go
└── pkg
└── lib
└── lib.go
go fmt をそのまま実行する
ソースツリーのトップディレクトリに今いるとして、go fmt ってすると
$ go fmt main.go
って感じで、実行したディレクトリの go ファイルだけがフォーマットされます。
サブディレクトリも含めて全部 go fmt したい
... という記法を使うと、それ以下のファイルを対象にできます。
$ go fmt ./... pkg/lib/lib.go main.go
それか、パッケージ指定して ... をつける
$ go fmt github.com/devlights/go-pkg-dir/... main.go pkg/lib/lib.go
なお、今いるディレクトリのパッケージ表記は go list ってやれば取れるので
$ go fmt $(go list)/... main.go pkg/lib/lib.go
でもオッケイ。
gofmt コマンド使っても良い
go fmt のヘルプ見ると分かりますが、go fmt は、内部で gofmt を呼び出しています。
$ go help fmt usage: go fmt [-n] [-x] [packages] Fmt runs the command 'gofmt -l -w' on the packages named by the import paths. It prints the names of the files that are modified. For more about gofmt, see 'go doc cmd/gofmt'. For more about specifying packages, see 'go help packages'. The -n flag prints commands that would be executed. The -x flag prints commands as they are executed. To run gofmt with specific options, run gofmt itself.
gofmt コマンドの方は、再帰でファイルを見てくれます。さらにこっちの方が多機能。
ってことで、gofmt を使うと以下で同じ結果となります。
$ gofmt -l -w . main.go pkg/lib/lib.go
どうせなら、コードのシンプル化のオプションもあるのでつけてしまって
$ gofmt -l -s -w . main.go pkg/lib/lib.go
でもいいですね。
-s を付与したときの挙動は、以下に記載されています。
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場