golangci lint是Go linter一个聚合器,里面内置了几十个linter,并且更新速度快,是一个强大的Go代码静态检查的工具。
官方提倡二进制安装,但为了快速入门,咱们就不使用二进制安装了
# Go 1.16+
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.43.0
# Go version < 1.16
go get -u github.com/golangci/golangci-lint/cmd/golangci-lint@v1.43.0
可以直接使用下面命令,会对当前目录下的所有文件进行静态代码检查。
这两个命令是等价的
golangci-lint run
golangci-lint run ./...
也可以指定具体检查哪些目录和文件
golangci-lint run dir1 dir2/... dir3/file1.go
golangci-lint可以零配置使用,默认情况下会启用和没有启用的linter可以使用下面命令查看
golangci-lint help linters
可以通过-E启用linter,-D禁用linters
golangci-lint run --disable-all -E errcheck
配置文件的优先级低于命令行选项。如果在命令行和配置文件中提供了相同的bool/string/int选项,则命令行中的选项将被使用。
启用禁用的linter是在命令行和配置文件组合而来的。
golangci-lint 在当前工作目录的以下路径中查找配置文件:
golangci-lint 还在从第一个分析路径的目录到根目录的所有目录中搜索配置文件。如果没有找到配置文件,将尝试在家目录中找到一个。
使用golangci-lint config path,查看使用的是哪个配置文件。
下面是配置文件的简单示例和注释
run:
skip-dirs: # 设置要忽略的目录
- .*~
- cmd
skip-files: # 要忽略的文件_test.go
- _test.go
timeout: 2m #超时时间,默认1分钟
concurrency: 4 #默认的并发使用cup数量
linters-settings:
errcheck:
check-type-assertions: true # 报告不检查类型断言的错误
gocognit:
min-complexity: 10 # 报告的最小代码复杂度,默认为30
dogsled:
max-blank-identifiers: 2 # 检查有太多空白标识符的赋值;默认是2
lll:
line-length: 20 # 最大行长,更长的行将被报告。默认是120,
makezero:
always: false # 只允许长度为0的片初始化。默认的是false.
linters:
disable-all: true #关闭所有
enable: #使用的linter
- errcheck
- gocognit
- dogsled
- lll
- makezero
官方提供了yaml配置文件的例子,里面包含了所有的配置项和注释,地址是这个:
https://github.com/golangci/golangci-lint/blob/master/.golangci.example.yml