GolangCI-Lint是一个lint聚合器,它的速度很快,平均速度是gometalinter的5倍。它易于集成和使用,具有良好的输出并且具有最小数量的误报。而且它还支持go modules。最重要的是免费开源。
一开始想用gometalinter,结果发现golangci-lint更好用,而且下载也更方便. gometalinter找了半天没找到安装方法,go get 下载报错 最后选择用golangci-lint
GitHub地址:https://github.com/golangci/golangci-lint/
安装方法
# Go 1.16+
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.42.1
# Go version < 1.16
go get -u github.com/golangci/golangci-lint/cmd/golangci-lint@v1.42.1
简单使用
-golangci-lint run [目录]/[文件]
-golangci-lint run ./...
-golangci-lint run dir1 dir2/... dir3/file1.go
支持的linterlinter详细参数设置
可以通过命令golangci-lint help linters查看它支持的linters。你可以传入参数-E/--enable来使某个linter可用,也可以使用-D/--disable参数来使某个linter不可用。
golangci-lint run --disable-all -E errcheck
golangci-lint run -v --no-config --disable-all -E goimports --fix main.go
常用的Linter介绍
typecheck 与go编译器类似的类型检查
cyclop
govet Vet检查Go源代码并报告可疑的结构,比如Printf调用,其参数与格式字符串不一致
ineffassign 检测对现有变量的赋值何时未被使用
staticcheck
varcheck 找到未使用的全局常量或变量
deadcode 未使用到的代码,
errcheck 返回的error未处理
structcheck 检测结构体中未使用的字段
unused 未使用的常量、变量、函数和类型定义
gosimple 代码中有需要优化的地方,用于简化代码风格
.golangci.yml配置 golangci-lint run -c .golangci.yaml
run:
skip-dirs:
- pkg/analyzer/testdata
linters-settings:
golint:
min-confidence: 0
goconst:
min-len: 2
min-occurrences: 3
misspell:
locale: US
linters:
enable-all: true
disable:
- lll
- prealloc
- dupl
- wsl
- nlreturn
- goerr113
- exhaustivestruct
- paralleltest
- testpackage
- gomnd
- gocognit
- nestif
- interfacer
有问题 会直接报错 不需要编译,这里只是多了一个空格,就会有提示,非常方便
参考文章