对于一门编程语言来讲,代码格式化是最容易引发争议的一个问题,不一样的开发者可能会有不一样的编码风格和习惯,可是若是全部开发者都能使用同一种格式来编写代码,开发者就能够将宝贵的时间专一在语言要解决的问题上。html
Golang的开发团队制定了统一的官方代码风格,而且推出了gofmt工具(gofmt或go fmt)来帮助开发者格式化他们的代码到统一的风格。gofmt是一个cli程序,会优先读取标准输入,若是传入了文件路径的话,会格式化这个文件,若是传入一个目录,会格式化目录中全部.go文件,若是不传参数,会格式化当前目录下的全部.go文件。git
gofmt默认不对代码进行简化,使用-s参数能够开启简化代码功能,具体来讲会进行以下的转换:github
以下形式的切片表达式:
[]T{T{}, T{}}
将被简化为:
[]T{{}, {}}
复制代码
以下形式的切片表达式:
s[a:len(s)]
将被简化为:
s[a:]
复制代码
以下形式的迭代:
for x, _ = range v {...}
将被简化为:
for x = range v {...}
以下形式的迭代:
for _ = range v {...}
将被简化为:
for range v {...}
复制代码
gofmt命令参数列表以下:golang
usage: gofmt [flags] [path ...]
-cpuprofile string
write cpu profile to this file
-d display diffs instead of rewriting files
-e report all errors (not just the first 10 on different lines)
-l list files whose formatting differs from gofmt's -r string rewrite rule (e.g., 'a[b:len(a)] -> a[b:]') -s simplify code -w write result to (source) file instead of stdout 复制代码
能够看到,gofmt命令还支持自定义的重写规则,使用-r参数,按照pattern -> replacement的格式传入规则。编程
有以下内容的Golang程序,存储在main.go文件中。数组
package main
import "fmt"
func main() {
a := 1
b := 2
c := a + b
fmt.Println(c)
}
复制代码
用如下规则来格式化上面的代码。bash
gofmt -r "a + b -> b + a"
复制代码
格式化的结果以下。编程语言
package main
import "fmt"
func main() {
a := 1
b := 2
c := b + a
fmt.Println(c)
}
复制代码
*注意:Gofmt使用tab来表示缩进,而且对行宽度无限制,若是手动对代码进行了换行,gofmt也不会强制把代码格式化回一行。工具
gofmt是一个独立的cli程序,而go中还有一个go fmt命令,go fmt命令是gofmt的简单封装。ui
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.
See also: go fix, go vet.
复制代码
go fmt命令自己只有两个可选参数-n和-x,-n仅打印出内部要执行的go fmt的命令,-x命令既打印出go fmt命令又执行它,若是须要更细化的配置,须要直接执行gofmt命令。
go fmt在调用gofmt时添加了-l -w参数,至关于执行了gofmt -l -w
。
Goland是JetBrains公司推出的Go语言IDE,是一款功能强大,使用便捷的产品。
在Goland中,能够经过添加一个File Watcher来在文件发生变化的时候调用gofmt进行代码格式化,具体方法是,点击Preferences -> Tools -> File Watchers,点加号添加一个go fmt模版,Goland中预置的go fmt模版使用的是go fmt命令,将其替换为gofmt,而后在参数中增长-l -w -s参数,启用代码简化功能。添加配置后,保存源码时,goland就会执行代码格式化了。