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。- 随机文章
- 风儿(风儿轻轻的吹)
- 饿了么红包怎么用(饿了么红包怎么用微信支付)
- 儿童教育文章(儿童教育)
- 光遇花手先祖位置(安卓光遇手花先祖)
- 广州4a广告公司(广州4a广告公司创意总监年薪)
- 抖音卡(抖音卡顿怎么解决)
- xboxones(xboxone手柄怎么配对主机)
- 兵马俑(兵马俑介绍和历史背景)
- 陈武简历
- 帆船比赛(帆船比赛视频)
- 海猫鸣泣之时游戏(海猫鸣泣之时游戏在哪玩)
- 韩国媳妇和小雪(韩国媳妇和小雪的父亲工资是多少)
- 儋州市第二中学(儋州市第二中学录取分数线)
- 鬼泣5攻略(鬼泣5攻略第三关怎么跳)
- 地球日主题(2020年世界地球日主题)
- 和柳亚子(和柳亚子先生于田)
- 冰客(冰客果汁)
- yy魔兽(yy魔兽世界)
- 国外成人游戏(国外成人游戏注册需要visa信用卡)
- 充值卡代理(充值卡代理加盟)
- 拆奶罩
- 郭妮小说(恶魔的法则郭妮小说)
- 东天目山(东天目山景区)
- 杭同(杭同培训中心怎么样)
- 蝙蝠给人类的一封信(蝙蝠给人类的一封信)
- 大松电饭煲(美的大松电饭煲)
- 疯狂填字(疯狂填字5)
- 观音普门品(观音普门品念诵全文)
- 河北省大运会(河北省大运会时间)
- 哈利波特官网(哈利波特官网在哪里)
