Gogolintgofmtmisspellgolangci-lint
官网地址: https://github.com/golangci/golangci-lint
golangci-lint
1. 安装
golangci-lintgolangci-lintGo
go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.35.2
golangci-lint
如不能成功安装,则使用下面命令:
# binary will be $(go env GOPATH)/bin/golangci-lint
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.35.2
不能成功安装请参考
https://blog.csdn.net/txl910514/article/details/105880125
wohu@ubuntu:~$ curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.35.2
golangci/golangci-lint info checking GitHub for tag 'v1.35.2'
golangci/golangci-lint info found version: 1.35.2 for v1.35.2/linux/amd64
golangci/golangci-lint info installed /home/wohu/gocode/bin/golangci-lint
wohuh@ubuntu:~$ ls go
如果还是安装失败,采用以下方法,下载源码,执行安装脚本
cd $GOPATH/src/github.com
git clone https://github.com/golangci/golangci-lint.git
cd golangci-lint/
chmod +x install.sh
sh install.sh -b $(go env GOPATH)/bin v1.38.0
安装完成后,在终端输入如下命令,检测是否安装成功。
golangci-lint --version
golangci-lint has version 1.35.2 built from 1da5701 on 2021-01-11T02:54:03Z
2. 运行
golangci-lint
package mainimport "os"const name string = "wohu"
func main() {os.Mkdir("demo_test", 0755)
}
运行命令:
wohu@ubuntu:~/gocode/src$ golangci-lint run demo.go
demo.go:5:7: `name` is unused (deadcode)
const name string = "wohu"^
demo.go:7:13: Error return value of `os.Mkdir` is not checked (errcheck)os.Mkdir("demo_test", 0755)^
通过代码检测结果可以看到,两个代码规范问题都被检测出来了。检测出问题后,你就可以修复它们,让代码更加符合规范。
3. 配置
golangci-lintlintergolangci-lintlinter
- deadcode - 死代码检查
- errcheck - 返回错误是否使用检查
- gosimple - 检查代码是否可以简化
- govet - 代码可疑检查,比如格式化字符串和类型不一致
- ineffassign - 检查是否有未使用的代码
- staticcheck - 静态分析检查
- structcheck - 查找未使用的结构体字段
- typecheck - 类型检查
- unused - 未使用代码检查
- varcheck - 未使用的全局变量和常量检查
golangci-lintlintergolangci-lint linterslinter
lintergolangci-lint.golangci.ymlgolangci-lintgolangci-lintunused
.golangci.yml
linters:disable-all: trueenable:- unused
golangci-lintgolangci-lint
service:golangci-lint-version: 1.32.2 # use the fixed version to not introduce new linters unexpectedly
linterUS
linters-settings:misspell:locale: US
golangci-lintgolangci-lint
.golangci.yml
linters-settings:golint:min-confidence: 0misspell:locale: US
linters:disable-all: trueenable:- typecheck- goimports- misspell- govet- golint- ineffassign- gosimple- deadcode- structcheck- unused- errcheck
service:golangci-lint-version: 1.32.2 # use the fixed version to not introduce new linters unexpectedly
4. 集成到 CI
CICI
JenkinsGitlab CIGithub ActionMakefilegolangci-lintMakefile
getdeps:@mkdir -p ${GOPATH}/bin@which golangci-lint 1>/dev/null || (echo "Installing golangci-lint" && go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.32.2)
lint:@echo "Running $@ check"@GO111MODULE=on ${GOPATH}/bin/golangci-lint cache clean@GO111MODULE=on ${GOPATH}/bin/golangci-lint run --timeout=5m --config ./.golangci.yml
verifiers: getdeps lint