89

私は現在、次のようなプロジェクトを組織しています。

〜/ code / go
         /置き場
         / pkg
         / src
             /proj/main.go
                  /some_package/package.go
                  /some_other_package/some_other_package.go

プロジェクト全体でツールを使用したい場合go fmt、プロジェクトのソースツリー内のディレクトリごとに個別に使用するのが唯一の方法のようです。

go fmt proj
go fmt proj/package
go fmt proj/some_other_package

fmtコマンドにソースツリー全体で実行するように指示する方法はありますか?

4

6 に答える 6

126

...ワイルドカードとして3つのドット()を使用できます。したがって、たとえば、次のコマンドはすべてのgithub.comパッケージをフォーマットします。

go fmt github.com/...

このワイルドカードは、などの他のgoコマンドでも機能しgo listますgo get。そのような醜い検索コマンドを覚えておく必要はありません。

于 2012-11-10T11:47:13.550 に答える
78

gofmtの代わりに使用するとgo fmt、再帰的になります。たとえば、次のコマンド

gofmt -s -w .

(最後の小さな点に注意してください)再帰的にフォーマットし、単純化し、結果を現在のディレクトリの下のすべてのファイルに保存します。gfとして定義されたシェルエイリアスがあり、gofmt -s -w .非常に便利です。

gofmt -l .必要に応じて、最初に(フォーマットがgofmtのものと異なるファイルをリストしてください)を試してください:-)

于 2012-11-11T18:10:42.740 に答える
41

また、次のコマンドを実行してみることもできます。

go fmt ./...

プロジェクトディレクトリから。

于 2018-03-20T21:15:23.840 に答える
5
find proj -type f -iregex '.*\.go' -exec go fmt '{}' +

説明

  • find proj:このディレクトリ内のすべてを検索します...
    • -type f:...それはファイルです
    • -iregex '.*\.go':...そして大文字と小文字を区別せずに正規表現に一致します.*\.go
  • ...実行go fmtしてから、オペレーティングシステムが実行可能ファイルへの受け渡しを一度に処理できる数の一致するファイルを実行します。
于 2012-11-10T04:17:45.670 に答える
4

GoLand IDEを使用している場合は、プロジェクトを右クリックすると、が表示されますGo Toolsここに画像の説明を入力してください

于 2020-11-24T09:13:04.743 に答える
3

一部の人が言及したコマンドgofmt ./...は、Windowsでは機能しません(少なくとも私のWin7では)。

その代わりに、gofmt -d .\再帰的に機能するものを使用しました。-dチェックに合格するために必要な変更をリストしたいので、フラグを使用します。

注意:golint ./...Windowsでは動作しますが、動作gofmt ./...しません。

于 2019-06-06T11:43:47.457 に答える