Go静态代码检查工具GolangCI-Lint

GolangCI-Lint是一个lint聚合器,它的速度很快,平均速度是gometalinter的5倍。它易于集成和使用,具有良好的输出并且具有最小数量的误报。而且它还支持go modules。最重要的是免费开源。
Go静态代码检查工具GolangCI-Lint_第1张图片
下面公司或者产品都使用了golangci-lint,例如:Google、Facebook、Red Hat OpenShift、Yahoo、IBM、Xiaomi、Samsung、Arduino、Eclipse Foundation、WooCart、Percona、Serverless、ScyllaDB、NixOS、The New York TimesIstio

安装

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

参考文章

  1. golangci-lint

你可能感兴趣的:(GO学习总结)