golangci-lint介绍
Golang常用的checkstyle有golangci-lint和golint,今天我们主要介绍golangci-lint,golangci-lint用于许多开源项目中,比如kubernetes、Prometheus、TiDB等都使用golangci-lint用于代码检查,TIDB的makefile中的check-static使用golangci-lint进行代码检查,可参考: https://github.com/pingcap/tidb/blob/master/Makefile
源码地址:https://github.com/golangci/golangci-lint
安装及使用:https://golangci-lint.run/
golangci-lint使用
1. 检查当前目录下所有的文件
golangci-lint run 等同于 golangci-lint run ./...
2.可以指定某个目录和文件
golangci-lint run dir1 dir2/... dir3/file1.go
检查dir1和dir2目录下的代码及dir3目录下的file1.go文件
3.可以通过--enable/-E开启指定Linter,也可以通--disable/-D关闭指定Linter
Linter
Linters是代码检查的项,默认开启的Linters如下:
还有许多默认没有开启的Linter,可以通过—enable开启默认未开启的Linter。
常用的Linter介绍
deadcode 未使用且未导出的函数(比如:首字母小写且未被调用的方法)
errcheck 返回的error未处理
structcheck 检测结构体中未使用的字段
unused 方法中方法名首字母小写(未导出)并且未使用的方法
gosimple 代码中有需要优化的地方
比如:
1. err = errors.New(fmt.Sprintf("%s", val)) 代码检查会直接推荐你使用fmt.Errorf(...)
2. strChan := make(chan string,0) 代码检查会提示你直接使用 make(chan string)
3. select中只有一个case 代码检查会提示你去掉select
ineffassign:检测变量的赋值
示例:
var index byte = 0
以上代码会提示 ineffectual assignment to index(无效的分配,因为index的默认值为0)
govet:用于检测代码结构中可以的构造
示例:
1. fmt.Errorf("%s", val) 有声明但没有使用
2. loopclosure: loop variable xxx captured by func literal (govet) 某个方法中重复定义了相同的局部变量
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)