golangci-lint #
golangci-lint按照官方的说法是用于go语言的代码静态检查工具集(因为包含它多种 Go 代码检查工具)。
特性: 1.快速:并行非执行 linters,可以复用 Go构建cache和caches分析结果 2.配置文件基于yaml语法进行配置 3.可以与常见开发工具集成,例如:VS Code、Sublime、Goland、Emacs、Vim、Atom、Github Actions 4.包含了很多 linters,不需要安装 5.执行结果输出带有美观,不仅带有颜色,还有源码行号和标识 6.尽可能的减少误报,可以通过设置忽略某些模式
golangci-lint 的安装 #
# macos
brew install golangci-lint
brew upgrade golangci-lint
# linux and windows
# 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.46.2
golangci-lint --version
源码安装
# Go 1.16+
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.46.2
# Go version < 1.16
go get -u github.com/golangci/golangci-lint/cmd/golangci-lint@v1.46.2
go install/go get 安装不保证能正常工作,官方建议使用二进制安装
二进制方式安装
https://golangci-lint.run/usage/install/
golangci-lint 的使用 #
在项目根路径下面执行 golangci-lint run
就可以检查整个项目的代码。
shell
golangci-lint run
# 等价于
golangci-lint run ./...
# 其他用法
golangci-lint run dir1 dir2/... dir3/file1.go
指定目录时不会递归分析其子目录,要递归分析其子目录需要加上 /...
。
没有配置文件时,golangci-lint 使用默认的代码检查器进行检查。
shell
# 查看默认启用和关闭了哪些检查器
golangci-lint help linters
排除代码检查 #
通过注释可以跳过代码检查,使用方式如下:
go
var bad_name int //nolint
var bad_name int //nolint:golint,unused
//nolint
func allIssuesInThisFunctionAreExcluded() *string {
// ...
}
//nolint:govet
var (
a int
b int
)
或者忽略对整个文件进行检查
go
//nolint:unparam
package pkg
配置文件 #
golangci-lint 会自动在当前目录下查找以下名称的配置文件:
.golangci.yml
.golangci.yaml
.golangci.toml
.golangci.json
配置包含不同的 options,每个 options 的作用各不相同,生产环境则可以根据实际情况进行不同的配置。
go
# 检测基本配置
# Options for analysis running.
run:
# See the dedicated "run" documentation section.
option: value
# output configuration options
output:
# See the dedicated "output" documentation section.
option: value
# 修改某个特定linter的设置
# All available settings of specific linters.
linters-settings:
# See the dedicated "linters-settings" documentation section.
option: value
# 开启/关闭 某个linter
linters:
# See the dedicated "linters" documentation section.
option: value
issues:
# See the dedicated "issues" documentation section.
option: value
severity:
# See the dedicated "severity" documentation section.
option: value
例如,在 linters 中配置启用、关闭不同的检查工具。
go
linters:
disable-all: true
enable:
- megacheck
- govet
enable-all: true
disable:
- maligned
- prealloc
presets:
- bugs
- unused
fast: false