我有一个项目目前组织如下:
~/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
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉fmt命令在整个源代码树上运行?
tux*_*21b 93
您可以使用三个点(...)作为通配符.例如,以下命令将格式化所有github.com包:
go fmt github.com/...
Run Code Online (Sandbox Code Playgroud)
此通配符也适用于其他go命令,如go list,go get等等.没有必要记住这样丑陋的查找命令.
Son*_*Gao 45
如果你使用gofmt而不是go fmt,它是递归的.例如,以下命令
gofmt -s -w .
Run Code Online (Sandbox Code Playgroud)
(注意最后的小点)递归地格式化,简化并将结果保存到当前目录下的每个文件中.我有一个shell别名gf定义为,gofmt -s -w .并发现它非常方便.
首先尝试gofmt -l .(列出格式与gofmt不同的文件):-)
find proj -type f -iregex '.*\.go' -exec go fmt '{}' +
Run Code Online (Sandbox Code Playgroud)
find proj:找到这个目录中的所有内容......
-type f:...那是一个文件-iregex '.*\.go':...和case-insensitively匹配正则表达式 .*\.gogo fmt后跟多个匹配的文件,因为操作系统可以一次性处理传递给可执行文件.