golangci-lint 默认输出冗长,需用 --out-format=line-number --print-issued-lines=false --print-linter-name=true --show-stats=true 实现精简摘要,末行自动统计问题总数与类型;该配置须写入项目根目录 .golangci.yml 的 output 段并确保 IDE/CI 显式加载才生效。

golangci-lint 怎么只显示告警摘要,不刷满屏文件细节
默认运行golangci-lint run 会逐行打印每个问题的文件、行号、列号和消息,大型项目一跑就是几百行,真正想看的“总共几个 error、几个 warning、哪些 linter 触发了”反而被淹没。
关键不是关掉输出,而是换一种更紧凑的呈现方式:用 --out-format=tab 或 --out-format=github-actions(CI 场景),但最轻量、最符合“摘要”需求的是 --print-issued-lines=false + --print-linter-name=true + 控制输出格式为 line-number。
实操建议如下:
-
golangci-lint run --out-format=line-number --print-issued-lines=false --print-linter-name=true:只输出「文件:行:列 linter_name 信息」一行式,无代码上下文,适合快速扫视问题分布 - 加
--issues-exit-code=0避免因有 issue 就退出(仅摘要查看时有用) - 若只想统计数量,用
golangci-lint run --out-format=json | jq '.issues | length'(需装jq) - 注意:
--out-format=colored-line-number虽带颜色,但默认仍打印代码行——必须配--print-issued-lines=false才真正精简
.golangci.yml 中如何持久化摘要输出配置
命令行参数不能自动带入 IDE 或 CI,想让所有人(包括 GoLand、VS Code、GitHub Actions)都默认看到摘要,得写进配置文件。在项目根目录的 .golangci.yml 里加这段:
output: format: line-number print-issued-lines: false print-linter-name: true show-stats: true
其中 show-stats: true 是关键——它会在最后追加一行类似 Found 12 issues (10 errors, 2 warnings) in 3 files 的汇总统计,这才是真正的“摘要”。
- 这个配置只影响输出样式,不改变任何检查逻辑或启用的 linter
- VS Code 的 Go 插件会读取该配置,但需确认设置里勾选了「使用配置」并填对路径(默认是项目根目录下的
.golangci.yml) - GoLand 同样依赖该配置,且必须在 Settings → Go → 静态分析器 → 使用配置 中指定路径,否则可能沿用旧缓存
为什么 --out-format=github-actions 不适合本地摘要查看
--out-format=github-actions 是专为 GitHub Actions 设计的格式,输出形如 ::error file=main.go,line=42,col=10::SA1019: xxx,目的是让 GitHub 自动解析为 PR 注释。它确实简洁,但:
- 本地终端里看不到颜色或结构化高亮,纯文本难读
- 不带
show-stats统计,无法一眼看出总数 - 部分 IDE(如 VS Code)不识别该格式,可能直接忽略或报错
- CI 中用它没问题,但日常开发中不如
line-number+show-stats直观
容易被忽略的兼容性点
摘要输出行为在不同版本间有细微差异:
立即学习“go语言免费学习笔记(深入)”;
-
show-stats在 v1.52+ 才稳定支持;v1.49 及之前可能不显示或格式错乱 -
--print-issued-lines=false对某些 linter(如revive的自定义规则)可能无效,因其内部强制输出上下文 - 如果配置了
issues.max-same-issues: 1,统计总数会不准——它限制重复问题展示次数,但不影响show-stats的原始计数逻辑 - 多 module 项目中,每个 module 的
.golangci.yml必须单独配置,根目录的配置不会继承


















