golangci-lint 本身不检查单行长度,其内置 linter 均不支持行长限制;需通过 revive 配置 line-length 规则实现,且可配合 gocritic 进一步筛查长文本隐患。

golangci-lint 本身不检查单行长度
直接说结论:golangci-lint 没有内置 linter 负责检测单行字符数(比如是否超过 100 或 120 字符)。它的核心 linter 如 staticcheck、govet、gofmt 都不处理这个维度。Go 官方也从未将“行长”列为语言规范要求,gofmt 只做缩进和换行逻辑,不截断长行。
用 revive 替代或补充实现行长检查
真正能控制单行长度的是第三方 linter revive,它支持可配置的 line-length 规则,且与 golangci-lint 兼容良好。你需要显式启用它:
- 安装:
go install github.com/mgechev/revive@latest - 在
.golangci.yml中添加:linters-settings: revive: rules: - name: line-length arguments: [100] # 单行最多 100 字符 severity: warning - 确保
revive在linters.enable列表里:- revive -
revive的line-length默认只统计非注释/非字符串部分;若需包含注释,得加include-comments: true参数
为什么不用 golint 或 govet 强行凑数
旧版 golint 已被弃用,且从不检查行长;govet 和 staticcheck 也完全无视该指标。强行用正则脚本预处理源码再交给 golangci-lint 是绕远路——既破坏工具链职责分离,又无法准确定位行内位置(golangci-lint 报错时行号列号会失真)。
实际项目中行长限制容易被忽略的点
即使配了 revive 的 line-length,也要注意:字符串字面量、SQL 查询拼接、JSON 常量等长文本通常会被豁免(否则告警泛滥),但这类地方恰恰是可读性隐患高发区;建议配合 gocritic 的 hugeParam 或 stringOfLen 规则做二次筛查,而不是只盯着数字。
立即学习“go语言免费学习笔记(深入)”;


















