golangci-lint 默认不检查注释规范,因其内置linter(如govet、staticcheck)不解析注释内容;需显式启用revive的exported-comment、comment-format等规则,或使用swag、strchecker等专用工具辅助校验。

golangci-lint 本身不检查注释规范,它默认不处理文档格式问题;要校验 Go 代码注释(如 godoc 风格、函数文档、参数说明),得靠额外启用特定 linter 或外部工具。
为什么 run 命令不报注释错误?
golangci-lint 的默认启用集(govet、errcheck)和主流推荐组合(staticcheck、unused、revive)都不解析注释内容。它不校验:// 后有没有空格、函数是否缺 /* ... */ 文档、参数是否漏写 @param —— 这些属于文档生成或风格类问题,不在其语义分析范围内。
- 注释缺失或格式错乱不会触发
golangci-lint run报告,除非你显式启用了支持注释检查的 linter -
golint曾能查部分注释风格(如首字母大写、缺少函数文档),但它已于 2021 年被官方弃用,golangci-lintv1.50+ 默认禁用,也不再维护 - 即使配置了
revive,它默认规则里也**不包含注释检查**,需手动开启对应 rule(如exported-comment)
怎么用 revive 检查导出符号的注释?
revive 是目前最常用、可配置的替代方案,能检查导出函数/类型是否带 godoc 注释,以及基本格式合规性。关键不是“开 revive”,而是开对 rule:
- 在
.golangci.yml的linters-settings.revive.rules下启用:exported-comment(强制导出标识符有注释)、comment-format(检查注释首字母是否大写、末尾是否带句号) - 示例配置片段:
linters-settings: revive: rules: - name: exported-comment arguments: [] - name: comment-format arguments: [] - 注意:
exported-comment只检查func DoSomething()这类导出符号,对func doSomething()(小写开头)完全不触发 - 它不校验
swaggo的// @Summary或// @Param等 Swagger 注释——那是swag工具的事,不是 linter 的职责
如何检查 Swagger 注释或自定义文档标记?
这类注释(// @Param、// @Success、// @Description)属于 swaggo 生态,golangci-lint 无法原生识别。可行路径只有两个:
立即学习“go语言免费学习笔记(深入)”;
- 用
swag init --parseDependency配合--parseInternal(如需检查 internal 包)执行时会报错:若@Param缺字段、类型写错、路径不匹配路由,它会直接 fail,这是最贴近“校验”的方式 - 写轻量脚本扫描注释行,比如用
grep -r "@Param.*name.*type" ./ | grep -v "string\|int\|bool"快速定位可疑项;但别塞进.golangci.yml,它不支持正则断言类逻辑 - 不要试图用
revive的rule去 match@开头注释——它的 AST 解析器不把这种注释当结构化数据,匹配结果不可靠
注释里混中文标点怎么办?
标准 linter 全部忽略这个维度。如果你的团队约定日志字符串必须 ASCII(避免乱码),但开发者手滑写了 "用户不存在!"(中文感叹号),golangci-lint 不会报。这时候需要:
- 引入专用工具
strchecker(见知识库),它能扫描所有字符串字面量并匹配非 ASCII 字符,配置为 pre-commit hook 最有效 - 或者用
revive的string-formatrule(需 v1.3+),但它只检查fmt.Sprintf中的动词匹配,不查纯字符串 - CI 中加一行
grep -r -n "[\u4e00-\u9fff\uf900-\ufaff]" --include="*.go" . || true快速兜底,但会误伤中文注释——所以得配合exclude-rules跳过//行,实现难度高,不如交给strchecker
真正容易被忽略的是:注释校验永远滞后于代码变更。你改了函数签名但忘了更新 @Param,swag init 可能不报错;你删了导出函数却留着旧注释,revive 也不会提醒。这类一致性必须靠人盯,工具只能帮到边界。


















