Golang代码检查golangci-lint使用详解

Golang代码检查golangci-lint使用详解,第1张

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)   某个方法中重复定义了相同的局部变量

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/990382.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存