89

我有一个项目目前组织这样的事情:

〜/代码/去
         /垃圾桶
         /包
         /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

您可以使用三个点 ( ...) 作为通配符。例如,以下命令将格式化所有 github.com 包:

go fmt github.com/...

此通配符也适用于其他 go 命令,如go list,go get等。没必要记住这么难看的 find 命令。

于 2012-11-10T11:47:13.550 回答
78

如果你使用gofmt而不是go fmt,它是递归的。例如,以下命令

gofmt -s -w .

(注意最后的小点)递归格式化,简化并将结果保存到当前目录下的每个文件中。我gf定义了一个 shell 别名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 回答