golang静态代码检查_Go静态代码检查工具GolangCI-Lint-Go语言中文社区

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/golangci-lint@v1.16.0

在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

参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值