golangci-lint配置与使用

1.golangci-lint是什么

golangci-lint按照官方的说法是用于go语言的代码静态检查工具集(因为包含它多种 Go 代码检查工具)。

官网 https://golangci-lint.run/

特性:
1.快速:并行非执行 linters,可以复用 Go构建cache和caches分析结果
2.配置文件基于yaml语法进行配置
3.可以与常见开发工具集成,例如:VS Code、Sublime、Goland、Emacs、Vim、Atom、Github Actions
4.包含了很多 linters,不需要安装
5.执行结果输出带有美观,不仅带有颜色,还有源码行号和标识
6.尽可能的减少误报,可以通过设置忽略某些模式

2.Goland 中集成 golangci-lint

针对不同的开发工具,官方给出了不同的集成方式,本文暂时只讲解一下 golangci-lint 在 Goland 中的两种集成方式。

https://golangci-lint.run/usage/integrations/

golangci-lint 的安装

安装 golangci-lint 常用的方式主要有2种:

1.二进制方式安装

官方 https://golangci-lint.run/usage/install/

1
2
3
4
5
6
7
8
9
# 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

2.源码方式安装

1
2
3
4
5
# 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 安装不保证能正常工作,官方建议使用二进制安装

File Watcher 方式

通过 Plugins 安装插件

Tools -> File Watchers

External Tools 方式

配置好之后,在菜单栏 或 右键可以看到 External Tools 中多了一个 golint 选项,点击 golint即可。

3.golangci-lint 的使用

在项目根路径下面执行 golangci-lint run 就可以检查整个项目的代码。

1
2
3
4
5
6
7
8
golangci-lint run

# 等价于

golangci-lint run ./...

# 其他用法
golangci-lint run dir1 dir2/... dir3/file1.go

指定目录时不会递归分析其子目录,要递归分析其子目录需要加上 /...

没有配置文件时,golangci-lint 使用默认的代码检查器进行检查。

1
2
# 查看默认启用和关闭了哪些检查器
golangci-lint help linters

4.排除代码检查

通过注释可以跳过代码检查,使用方式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
var bad_name int //nolint
var bad_name int //nolint:golint,unused

//nolint
func allIssuesInThisFunctionAreExcluded() *string {
// ...
}

//nolint:govet
var (
a int
b int
)

或者忽略对整个文件进行检查

1
2
3
//nolint:unparam
package pkg

5.配置文件

golangci-lint 会自动在当前目录下查找以下名称的配置文件:

https://golangci-lint.run/usage/configuration/

  • .golangci.yml
  • .golangci.yaml
  • .golangci.toml
  • .golangci.json

配置包含不同的 options,每个 options 的作用各不相同,生产环境则可以根据实际情况进行不同的配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 检测基本配置
# 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 中配置启用、关闭不同的检查工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
linters:
disable-all: true
enable:
- megacheck
- govet
enable-all: true
disable:
- maligned
- prealloc
presets:
- bugs
- unused
fast: false