gofmt 是 golang 自带的代码自动格式化工具,是企业开发必用的代码格式化工具。但是今天的主角是gofumpt,比gofmt多了up,可以理解为他的升级版。
gofumpt的官网是GitHub - mvdan/gofumpt: A stricter gofmt。是从gofmt的基础上进行开发的。是gofmt的平替,具有更严格的格式化要求。
gofumpt的几个特点
第一个:默认跳过对 vendor 和testdata的格式化
第二个:不支持 -r 参数
第三个:更多的格式化规则
快速使用
第一步:安装
go install mvdan.cc/gofumpt@latest
规则列举
第一个:赋值运算符后不能有空行
func foo() { foo := "bar"}
格式化后
func foo() { foo := "bar"}
这样可以防止有些人觉得遗憾代码太长带来的自己的断行行为。
第二个:简单的错误检查之前不能有空行
package testfoo, err := doSomethingHappy()if err != nil { return err}
格式化后
package testfoo, err := doSomethingHappy()if err != nil { return err}
第三个:函数体不能用空行
func doSomethingHappy() { println("doSomethingHappy")}
格式化后
func doSomethingHappy() { println("doSomethingHappy")}
第四个:标准库的导入必须位于顶部的单独组中
package testimport ( "foo.com/bar" "io" "io/ioutil")
格式化后
package testimport ( "io" "io/ioutil" "foo.com/bar")
第五个:没有字段的结构体/接口的写法
var V interface {} = 3type Base struct {}func BaseFunction()
格式化后
var V interface{} = 3type Base struct{}func BaseFunction()
第六个:短的case判断写在一行
switch c {case 'a', 'b', 'c', 'd':}
switch c {case 'a', 'b', 'c', 'd':}
第七个:多个顶级的声明之间用逗号隔开
func foo() { println("multiline text")}func bar() { println("multiline text")}
func foo() { println("multiline text")}func bar() { println("multiline text")}
第八个:单个变量声明不用括号
var ( foo = "bar")
var foo = "bar"
第九个:简单的变量定义用简写的方式
var s = "somestring"
s := "somestring"
第十个:注释要先加一个空格
//DoIt is something that i do.func DoIt() {}
// DoIt is something that i do.func DoIt() {}
Goland使用gofumpt
手动格式化
在终端执行
gofumpt -l -w .
自动格式化
第一步:安装File Watcher 插件
第二步:点击 Settings -> Tools -> File Watchers,然后添加一个 gofumpt 工具,然后OK,这样以后文件每次保存时则会自动触发代码格式化。