go fmt令——格式化代码文件
gofmt 介绍
Go语言的开发团队制定了统一的官方代码风格,并且推出了 gofmt 工具(gofmt 或 go fmt)来帮助开发者格式化他们的代码到统一的风格。gofmt 是一个 cli 程序,会优先读取标准输入,如果传入了文件路径的话,会格式化这个文件,如果传入一个目录,会格式化目录中所有 .go 文件,如果不传参数,会格式化当前目录下的所有 .go 文件。
gofmt 默认不对代码进行简化,使用
-s参数可以开启简化代码功能,具体来说会进行如下的转换:1) 去除数组、切片、Map 初始化时不必要的类型声明
如下形式的切片表达式:[]T{T{}, T{}}
简化后的代码为:[]T{{}, {}}
2) 去除数组切片操作时不必要的索引指定
如下形式的切片表达式:s[a:len(s)]
简化后的代码为:
s[a:]
3) 去除循环时非必要的变量赋值
如下形式的循环:for x, _ = range v {...}
简化后的代码为:for x = range v {...}
如下形式的循环:for _ = range v {...}
简化后的代码为:for range v {...}
gofmt 令参数如下表所示:标记名称 | 标记描述 |
|---|---|
-l | 仅把那些不符格式化规范的、需要被令程序改写的源码文件的路径打印到标准输出。而不是把改写后的全部内容都打印到标准输出。 |
-w | 把改写后的内容直接写入到文件中,而不是作为结果打印到标准输出。 |
-r | 添加形如“a[b:len(a)] -> a[b:]”的重写规则。如果我们需要自定义某些额外的格式化规则,就需要用到它。 |
-s | 简化文件中的代码。 |
-d | 只把改写前后内容的对比信息作为结果打印到标准输出。而不是把改写后的全部内容都打印到标准输出。 令程序将使用 diff 令对内容进行比对。在 Windows 操作系统下可能没有 diff 令,需要另行安装。 |
-e | 打印所有的语法错误到标准输出。如果不使用此标记,则只会打印每行的第 1 个错误且只打印前 10 个错误。 |
-comments | 是否保留源码文件中的注释。在默认情况下,此标记会被隐式的使用,并且值为 true。 |
-tabwidth | 此标记用于设置代码中缩进所使用的空格数量,默认值为 8。要使此标记生效,需要使用“-tabs”标记并把值设置为 false。 |
-tabs | 是否使用 tab('\t')来代替空格表示缩进。在默认情况下,此标记会被隐式的使用,并且值为 true。 |
-cpuprofile | 是否开启 CPU 使用情况记录,并将记录内容保存在此标记值所指的文件中。 |
可以看到 gofmt 令还支持自定义的重写规则,使用
-r参数,按照 pattern -> replacement 的格式传入规则。【示例】有如下内容的 Golang 程序,存储在 main.go 文件中。
用以下规则来格式化上面的代码。package main
import "fmt"
func main() {
a := 1
b := 2
c := a + b
fmt.Println(c)
}
gofmt -w -r "a + b -> b + a" main.go
格式化的结果如下。package main
import "fmt"
func main() {
a := 1
b := 2
c := b + a
fmt.Println(c)
}
注意:gofmt 使用 tab 来表示缩进,并且对行宽度无限制,如果手动对代码进行了换行,gofmt 不会强制把代码格式化回一行。
go fmt 和 gofmt
gofmt 是一个独立的 cli 程序,而Go语言中还有一个go fmt令,go fmt令是 gofmt 的简单封装。go help fmt
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。- 随机文章
- 塞班 巴厘 马尔代夫(“三个热门旅游目的地-塞班、巴厘、马尔代夫”)
- 东港马尔代夫沙滩(东港马尔代夫沙滩:一个浪漫度假胜地)
- 东方马尔代夫打卡(探秘东方马尔代夫:旅拍达人必打卡地)
- 中国马尔代夫深圳(中国深圳打造马尔代夫式海岛旅游胜地)
- 北戴河的马尔代夫(北戴河:让你感受马尔代夫的浪漫旅程)
- 安丘小型马尔代夫(山东安丘建小马尔代夫,喜迎游客到来)
- 孕妇的马尔代夫吗(孕期旅行攻略:如何安全畅游马尔代夫)
- 总统逃往马尔代夫(总统涉嫌逃至马尔代夫,国内政局动荡)
- 国内马尔代夫航班(国内首飞|海南航空喜提马尔代夫航线)
- 选岛 马尔代夫(探寻马尔代夫之美:选岛攻略)
- 桑植马尔代夫游玩(桑植马尔代夫游记:一场海上奇幻之旅)
- 印度动武马尔代夫(印度派军舰向马尔代夫,引发地区紧张)
- 单身女郎马尔代夫(独自旅行,探寻马尔代夫的美丽世界!)
- 海南马尔代夫岛屿(海南建设人造岛屿打造中国版马尔代夫)
- 信阳光山马尔代夫(信阳阳光山岛秀奇,仿若置身马尔代夫)
- 沙滩水屋马尔代夫(马尔代夫沙滩水屋酒店的别样海岛体验)
- 泰国马尔代夫花园(泰国马尔代夫花园:热带风情浪漫之旅)
- 绵阳马尔代夫海景(绵阳一处海景别墅,仿若置身马尔代夫)
- 坂南 马尔代夫(坂南酒店:马尔代夫豪华海滩度假胜地)
- 粉色日落马尔代夫(马尔代夫的粉色日落:自然的绝美景致)
- 马尔代夫 酒店排名(马尔代夫最佳酒店排名Top10)
- 比马尔代夫更好的(超越马尔代夫:另一片度假胜地的发现)
- 舒淇马尔代夫现状(舒淇马尔代夫之行:了解该地旅游现状)
- 高清 马尔代夫(马尔代夫:美丽热带国度的高清掠影)
- 色彩颜料马尔代夫(探索马尔代夫:颜色与文化的奇妙交织)
- 老马 马尔代夫(老马成马尔代夫游玩达成心愿)
- 江门新会马尔代夫(江门新会从马尔代夫拥抱南海岛屿巡礼)
- 斐济 马尔代夫 级别(探寻南太平洋度假胜地:斐济与马尔代夫的乐趣等级)
- 海边代谢马尔代夫(畅游珊瑚海,探索马尔代夫的代谢之旅)
- 诸城马尔代夫拖车(靠岸!——诸城马代拖车成功完成任务)
