golangci-lint是非常流程的静态代码检查工具。具有以下优点:
- 速度非常快
- 可配置
- IDE集成
- linter聚合器
- 最小的误报错
- 良好的输出
静态代码检查
直接使用golangci-lint run命令即可对当前目录及子目录下的所有go文件进行静态代码检查。
同样可以设置参数来指定想要进行检查的文件或者目录,不过要注意,如果目录要递归检查,需要加上/...后缀,例如
golangci-lint run dir1 dir2/... dir3/file.go通过-c参数指定配置文件来进行静态代码检查。
使用-E参数来指定启用linter。-D参数来指定禁用的linter。
linter可能出现误报,可以:
- 命令行使用
-e参数或者配置文件的issues.exclude设置要排除的检查错误。使用issues.exclude-rules来配置哪些文件忽略哪些linter。 - 通过
run.skip-dir, run.skip-files来忽略指定目录下的Go文件,或指定的go文件。 - 源码使用
//nolinter注释,来忽略指定的代码行。同时还可以指定不用的linter。
在行末添加//nolinter注释可以忽略对此行的检查
var bad_name int //nolint:golint,unused在代码块上注释忽略对代码块的检查
//nolint
func allIssuesInThisFunctionAreExcluded() *string {
// ...
}
//nolint:govet
var (
a int
b int
)在package生命上注释忽略对此文件的检查
//nolint:unparam
package pkg
...使用技巧
- 第一次检查的时候,按照目录检查,以减轻修改压力。
- 按文件修改,减少文件切换次数。利用grep命令过滤出文件
golangci-lint run ./...|grep pkg/storage/redis_cluster.go- 在实际代码中因为变量命令可读性的问题,默认的80长度可能太小,可以把linters-setting.lll.line-length设置更大一些。
- 每次修改完代码都要进行一下检查。
- 在根目录下放置一个通用的golangcli-lint配置文件。