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 test
foo, err := doSomethingHappy()
if err != nil {
return err
}
格式化后
package test
foo, err := doSomethingHappy()
if err != nil {
return err
}
第三个:函数体不能用空行
func doSomethingHappy() {
<span class="hljs-built_in">println</span>(<span class="hljs-string">"doSomethingHappy"</span>)
}
格式化后
func doSomethingHappy() {
println(“doSomethingHappy”)
}
第四个:标准库的导入必须位于顶部的单独组中
package test
import (
“foo.com/bar”
“io”
“io/ioutil”
)
格式化后
package test
import (
“io”
“io/ioutil”
“foo.com/bar”
)
第五个:没有字段的结构体/接口的写法
var V interface {
} = 3
type Base struct {
}
func BaseFunction(
)
格式化后
var V interface{} = 3
type 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"
第十个:注释要先加一个空格
func DoIt() {}
func DoIt() {}
Goland使用gofumpt
手动格式化
在终端执行
gofumpt -l -w .
自动格式化
第一步:安装File Watcher 插件
第二步:点击 Settings -> Tools -> File Watchers,然后添加一个 gofumpt 工具,然后OK,这样以后文件每次保存时则会自动触发代码格式化。