GolangCI-Lint 是一个lint聚合器,它的速度很快,平均速度是gometalinter 的5倍。它易于集成和使用,具有良好的输出并且具有最小数量的误报。而且它还支持go modules 。最重要的是免费开源。
下面公司或者产品都使用了golangci-lint ,例如:Google、Facebook、Red Hat OpenShift、Yahoo、IBM、Xiaomi、Samsung、Arduino、Eclipse Foundation、WooCart、Percona、Serverless、ScyllaDB、NixOS、The New York Times 和Istio 。
安装
CI安装
大多数安装都是为CI(continuous integration)准备的,强烈推荐安装固定版本的golangci-lint 。
// 二进制文件将会被安装在$(go env GOPATH)/bin/golangci-lint目录
curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin vX.Y.Z
// 或者安装它到./bin/目录
curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s vX.Y.Z
// 在alpine Linux中,curl不是自带的,你需要使用下面命令
wget -O - -q https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s vX.Y.Z
上述命令执行完成后,你可以使用golangci-lint --version 来查看它的版本。
本地安装
建议不要对CI管道进行本地安装,仅在本地开发环境中以这种方式安装linter。
Windows,MacOS和Linux上,用命令:go get -u github.com/golangci/golangci-lint/cmd/golangci-lint 。当你的Go版本不低于1.11时,你可以获取golangci-lint的指定版本。例如:
GO111MODULE=on go get -u github.com/golangci/golangci-lint/cmd/[email protected]
在MacOS上面,你还可以使用brew 进行安装。
brew install golangci/tap/golangci-lint
brew upgrade golangci/tap/golangci-lint
本地安装完成后,你使用golangci-lint --version 是看不到它的版本信息的。命令行会提示错误:Error:unknown flag: --version 。要想看到可以执行下面的命令。
cd $(go env GOPATH)/src/github.com/golangci/golangci-lint/cmd/golangci-lint
go install -ldflags "-X 'main.version=$(git describe --tags)' -X 'main.commit=$(git rev-parse --short HEAD)' -X 'main.date=$(date)'"
如果你的机器是Windows,你可以在Git Bash中运行上述命令。这时再使用golangci-lint --version 就会看到类似的信息:
golangci-lint has version v1.16.0-11-g692dacb built from 692dacb on 2019年04月28日 14:30:25
使用
golangci-lint run [目录]/[文件名] ,例如检测下面的go文件。
package main
import (
"fmt"
"unsafe"
)
type Book struct {
Age int
Title string
}
func main() {
b := Book{}
fmt.Println("book size:", unsafe.Sizeof(b))
}
执行命令golangci-lint run main.go,可以在命令行看到下面提示:
main.go:14:2: SA4006: this value of `b` is never used (staticcheck)
b := Book{}
^
支持的linter
可以通过命令golangci-lint help linters 查看它支持的linters。你可以传入参数-E/--enable 来使某个linter 可用,也可以使用-D/--disable 参数来使某个linter 不可用。例如:
golangci-lint run --disable-all -E errcheck
参考文章
- golangci-lint
|
请发表评论