GolangCI-Lint 是Go的代码规范检查工具。

`GolangCi-Lint功能特点:

  • 非常快:并行运行 linters,重用 Go 构建缓存和缓存分析结果。
  • 基于 Yaml 的配置.
  • 与 VS Code、Sublime Text、GoLand、GNU Emacs、Vim、Atom、GitHub Actions 集成
  • 包含大量 linter,无需安装它们。
  • 由于调整的默认设置,误报次数最少。
  • 带有颜色的漂亮输出, 源代码行和标记的标识符。

Lint 配置文件

GolangCI-Lint 从当前工作目录中查找如下配置文件,也可以使用-c选项指定:

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

GolangCI-Lint还会在所有目录中搜索配置文件,从第一个分析路径的目录到根目录。

如果未找到配置文件,GolangCI-Lint 将尝试在主目录中查找一个配置文件。

要查看正在使用的配置文件以及它的来源,可使用 -v 选项运行 golangci-lint。

配置选项

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 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
# All available settings of specific linters.
linters-settings:
  # See the dedicated "linters-settings" documentation section.
  option: value
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

主要分为6个配置选项:

  1. run 运行分析配置,比如超时,忽略文件等
  2. output 输出配置,比如格式
  3. linters-settings 检测器配置,对具体的检测器细化配置
  4. linters 开启关闭检测器
  5. issues 检测器输出报告配置,比如忽略某些检测器的输出
  6. severity 检测器敏感度配置

Lint 常见问题及解决方案

依赖包顺序

依赖包的顺序为:标准库包、第三方依赖包、本项目自定义包。

执行 gofmt -s -w ${xxx.go} 自动排序。

linters配置里面加入gofmt

1
2
3
4
5
6
7
8
linters:
  # Disable all linters.
  # Default: false
  disable-all: true
  # Enable specific linter
  # https://golangci-lint.run/usage/linters/#enabled-by-default-linters
  enable:
    - gofmt

没有使用的代码

配置开启deadcode linter,检测代码中没有使用的代码。

1
2
3
linters:
  enable:
    - deadcode

可以执行golangci-lint help linters来查看支持的 linter 列表哪些 linter 启用/禁用。

参考