首页/开发/代码质量与评审速查/golangci-lint:Go 检查聚合器
规范与静态检查65 条

golangci-lint:Go 检查聚合器

golangci-lint 聚合多种 Go 检查:默认组含 errcheck、govet、ineffassign、staticcheck、unused 等(版本间略有差异),配置文件 .golangci.yml。

golangci-lint 是什么

golangci-lint 是 Go 生态最常用的检查聚合器:把 errcheck、govet、ineffassign、staticcheck、unused 等多个 linter 收进一次运行,并行执行并统一输出,省去为每个工具单独写一套流水线的麻烦。默认启用的集合会随版本变化,配置写在仓库根目录的 .golangci.yml。

基本信息

定位linter 聚合与并行执行
默认组errcheck、govet、ineffassign、staticcheck、unused 等
配置文件仓库根目录 .golangci.yml
运行方式本地命令与 CI 步骤共用同一份配置

典型使用场景

  • 新项目起步:先用默认组跑绿,再按需开启更多 linter
  • 统一团队工具链:本地与 CI 使用同一个二进制版本和配置
  • 存量代码逐步收紧:按目录或按 linter 分批启用
  • 提交前快速检查:只跑改动的包,缩短反馈时间
  • 大仓库优化:并发控制与结果缓存让单次运行保持可接受

常用命令

常用命令
golangci-lint run ./...                # 全量检查
golangci-lint run ./pkg/order/...      # 只检查改动的包,反馈更快
golangci-lint run --fix ./...          # 部分问题可自动修复
golangci-lint linters                  # 查看当前版本启用了哪些 linter
golangci-lint cache clean              # 结果异常时清缓存重跑

常用配置项

配置项作用注意事项
linters.enable在默认组之外追加检查新增检查先在小范围试跑,确认噪声可控
linters.disable关闭某个检查关闭前写清理由,避免连带削弱错误处理检查
issues.exclude-rules按路径或文本排除生成代码与测试夹具常用,范围别写得过宽
run.timeout单次运行超时大仓库需要适当放宽,否则中途被中断
把版本锁进依赖或工具清单:不同版本的默认 linter 与判定行为有差异,本地与 CI 不一致就会得到互相矛盾的结果。
本地只跑改动的包可以提速,CI 仍应跑全量:局部结果无法保证未改动的代码依然干净。
用 disable 关掉抱怨多的检查:errcheck 这类检查一关,未处理的错误就没人再发现了。

易错点

  • 本地与 CI 版本不一致:同一份代码在不同环境给出不同结论,先说结果是噪声还是真问题
  • 一次性把全部 linter 打开:存量代码报错成百上千,团队很快整体关闭
  • 用 disable 抹平告警:错误处理与并发相关的检查被一起放过
  • 排除规则写得过宽:生成代码与测试之外的文件也被顺带跳过
  • 把 CI 也改成增量检查:被间接影响的旧文件不会重跑,问题在合并之后才暴露

数据来源与参考

  • golangci-lint 官方文档(golangci-lint.run)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌