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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值