golangci-lint 不支持 --out-format=html,因其官方仅支持 colored-line-number、json、checkstyle 等格式;可视化需借助 sonarqube(checkstyle+Go插件)或 jq+html/template 手搓静态页。

golangci-lint 本身不支持生成网页报告,它只输出文本、JSON、checkstyle 等结构化格式;想看可视化报表,必须配合其他工具链做二次转换。
为什么直接用 golangci-lint --out-format=html 会失败
golangci-lint 的 --out-format 参数根本不接受 html 值——你试了会得到类似 unknown output format "html" 的错误。它的输出本质是“问题列表”,不是“可渲染页面”。所谓“可视化”,得靠后续步骤把检查结果喂给能画图/排版的工具。
- 它内置支持的格式只有:
colored-line-number(终端高亮)、json、checkstyle、junit-xml、github-actions等 -
html不在任何版本的官方文档或--help输出中出现过 - 试图加
--out-format=html属于典型配置幻觉,浪费调试时间
用 checkstyle + sonarqube 实现真·网页报告
这是目前最稳定、可落地、带历史趋势的方案,适合团队长期使用。sonarqube 能把 checkstyle 格式的 lint 结果解析成带分类、热力图、修复建议的 Web 页面。
- 先让 golangci-lint 输出 checkstyle:
golangci-lint run --out-format=checkstyle --output=report-checkstyle.xml - 确保 sonarqube 已启用 Go 插件(
sonar-go),并配置项目扫描路径 - 执行
sonar-scanner -Dsonar.host.url=http://localhost:9000 -Dsonar.login=your_token,其中sonar.go.checkstyle.reportPaths指向report-checkstyle.xml - 打开
http://localhost:9000,就能看到按严重等级、文件、规则分组的交互式报告
注意:sonarqube 是重服务,本地开发小项目可跳过;但 CI 中跑自动化质量门禁时,它几乎是唯一能存档对比的趋势平台。
轻量替代:用 jq + HTML 模板手搓简易报告
如果只是临时看一眼、不想搭服务,可以用 json 输出 + html/template 渲染一个静态 HTML 报告页——够快、够轻、无依赖。
- 生成 JSON:
golangci-lint run --out-format=json > report.json - 写个 Go 小程序读
report.json,用html/template渲染成表格(别用text/template,否则 XSS 风险) - 关键字段要提取:
From(文件路径)、Text(问题描述)、Line(行号)、Severity(等级) - 模板里用内联 CSS 控制颜色:
Severity == "error"就标红,"warning"标橙,避免 JS 依赖导致双击白屏
这种 HTML 文件可直接双击打开,也适用于 GitHub Pages 托管静态报告页——但别指望它有搜索、折叠、统计图这些高级功能。
别踩坑:GitHub Actions 中上传报告的常见断点
CI 流程里生成了 report.html 却看不到?大概率卡在这几个地方:
- 没设 artifact 上传路径:
artifacts步骤必须明确包含report.html或report-checkstyle.xml,否则流水线结束就丢弃 - HTML 报告里引用了相对路径的 CSS/JS,但上传后没一并打包——静态模板方案务必把样式内联,别外链
- sonarqube 扫描时工作目录不对,
sonar.sources=.写成sonar.sources=./src却忘了 lint 是从项目根跑的,导致文件路径对不上 - checkstyle XML 编码不是 UTF-8,sonarqube 解析失败静默跳过,查日志会看到
Invalid byte 1 of 1-byte UTF-8 sequence
真正难的从来不是生成报告,而是让每一份报告里的文件路径、行号、编码、上下文都能被下游工具准确定位——这点错一点,整个可视化链条就断了。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











