英文:
Go fmt on a whole source tree
问题
我目前有一个项目的组织结构如下:
~/code/go
/bin
/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命令在整个源代码树上运行?
英文:
I have a project currently organized something like this:
<pre>
~/code/go
/bin
/pkg
/src
/proj/main.go
/some_package/package.go
/some_other_package/some_other_package.go
</pre>
Now if I want to use the go fmt
tool on my whole project it seems that the only way is to do it separately for each directory in my projects source tree:
go fmt proj
go fmt proj/package
go fmt proj/some_other_package
Is there some way to tell the fmt command to run on the whole source tree?
答案1
得分: 140
你可以使用三个点(...
)作为通配符。所以例如,下面的命令将格式化所有的 github.com 包:
go fmt github.com/...
这个通配符也适用于其他的 go 命令,比如 go list
,go get
等等。没有必要记住这样一个丑陋的查找命令。
英文:
You can use three dots (...
) as a wildcard. So for example, the following command will format all github.com packages:
go fmt github.com/...
This wildcard also works with other go commands like go list
, go get
and so. There is no need to remember such an ugly find command.
答案2
得分: 92
如果你使用gofmt
而不是go fmt
,它是递归的。例如,以下命令
gofmt -s -w .
(注意末尾的小点)递归地格式化、简化并保存当前目录下的每个文件的结果。我定义了一个名为gf
的shell别名,其定义为gofmt -s -w .
,我觉得非常方便。
如果你想要的话,先尝试gofmt -l .
(列出与gofmt格式不同的文件)
英文:
If you use gofmt
instead of go fmt
, it's recursive. For example, following command
gofmt -s -w .
(notice the little dot at end) recursively formats, simplifies, and saves result into every file under current directory. I have a shell alias gf
defined as gofmt -s -w .
and find it quite handy.
Try gofmt -l .
(list files whose formatting differs from gofmt's) first if you want
答案3
得分: 50
此外,您可以尝试在您的项目目录中运行以下命令:
go fmt ./...
英文:
Also, you can try to run command:
go fmt ./...
from your project directory.
答案4
得分: 6
找到proj目录下的所有文件,并执行go fmt命令来格式化这些文件。
英文:
find proj -type f -iregex '.*\.go' -exec go fmt '{}' +
Explanation
find proj
: find everything in this directory...-type f
: ...that is a file-iregex '.*\.go'
: ...and case-insensitively matches the regular expression.*\.go
- ...and execute
go fmt
followed by as many matched files as the operating system can handle passing to an executable in one go.
答案5
得分: 5
如果您正在使用GoLand IDE,右键单击项目,您将找到Go Tools
。
答案6
得分: 3
The command gofmt ./...
mentioned by some, does not work on Windows (at least on my Win7).
Instead of it, I used gofmt -d .\
which works recursively. I use the -d
flag because I want to list the changes I need to make in order to pass the check.
NB: golint ./...
does work on Windows, just gofmt ./...
doesn't.
英文:
The command gofmt ./...
mentioned by some, does not work on Windows (at least on my Win7).
Instead of it, I used gofmt -d .\
which works recursively. I use the -d
flag because I want to list the changes I need to make in order to pass the check.
NB: golint ./...
does work on Windows, just gofmt ./...
doesn't.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论