golangci-lint run 常用参数包括 --fix(仅对支持修复的linter生效)、-E/-D(临时启停指定linter,优先级高于配置)、--out-format=github-actions(CI必需)、--timeout(建议设2m防卡死)、-c(显式指定配置文件);--skip-dirs需命令行用--skip-dirs=dir或配置中加正则边界^$才生效;排查问题首选golangci-lint run -v查看实际加载项。

golangci-lint run 常用命令行参数
直接运行 golangci-lint run 时,不加任何参数会检查当前目录下所有 Go 文件(不含 vendor/、testdata/ 等默认忽略路径),但多数场景需要显式控制行为。关键参数不是“可选”,而是“必须知道”——否则容易误判问题是否真实存在。
以下是最常被漏掉或误用的几个:
-
--fix:仅对支持自动修复的 linter(如gofumpt、revive)生效;对staticcheck或govet类型检查无效,加了也白加 -
-E <linter></linter>和-D <linter></linter>:临时启用/禁用某个 linter,优先级高于配置文件中的linters.enable/disable;适合调试某条规则是否误报 -
--out-format=github-actions:CI 场景必需,否则 GitHub Actions 无法解析为注释;本地运行会输出乱码,别在终端里试 -
--timeout=30s:大型项目不设超时,可能卡死在go list阶段;建议设为2m起步,而非默认的无限等待 -
-c .golangci.yml:显式指定配置文件路径;当项目含多个配置(如.golangci.dev.yml)时,不写-c就不会加载,哪怕文件名匹配默认规则
为什么 --skip-dirs 不生效?
很多人在 .golangci.yml 里写了 skip-dirs 却发现 internal/ 或 mocks/ 仍被检查,根本原因是:命令行参数会覆盖配置文件中同名项,而 golangci-lint run 默认会扫描子目录——即使你没传路径。
正确做法是明确传入目标范围:
立即学习“go语言免费学习笔记(深入)”;
- 只检查当前包:
golangci-lint run ./...(注意./...是语法,不是省略号) - 跳过特定目录:在配置中用正则,例如
skip-dirs: ["^internal$", "^mocks$"];注意开头的^和结尾的$,否则internal_api也会被误匹配 - 若用命令行跳过,必须写成
--skip-dirs=internal,mocks,不能用空格或换行分隔
golangci-lint -h 输出里藏了哪些坑?
golangci-lint -h 显示的是全局帮助,但真正有用的子命令帮助藏得深:
-
golangci-lint help run:列出所有run子命令参数,包括--fast(跳过缓存重建)、--no-config(强制无视配置文件)等冷门但关键选项 -
golangci-lint help linters:显示当前启用的所有 linter 名称及默认状态,比翻 YAML 更快确认errcheck是否真被启用了 -
golangci-lint run -v:加-v后能看到实际加载了哪个配置文件、跳过了哪些目录、启用了哪些 linter——这是排查“为什么没报错”的第一手依据
别信文档里写的“默认启用”,golangci-lint 的默认行为随版本变:v1.50+ 默认关闭 golint(已弃用),v1.54+ 默认启用 goheader(检查文件头注释)。不看 -v 输出,就等于闭眼调参。
如何验证某个 linter 是否真的在运行?
光看输出里有没有报错不够,因为 linter 可能被静默禁用,或因代码结构未触发检查逻辑。最可靠的方法是制造一个它必然报错的 case:
- 对
errcheck:写_ = os.Open("x"),它必须报error return value not checked - 对
gosimple:写if x == true,它应提示should omit comparison to bool constant - 对
govet:写fmt.Printf("%d %d", 1)(参数数不匹配),它要报missing argument for Printf
如果这些明确触发点都没反应,说明该 linter 没启用,或被 linters-settings 中的某项配置压制(比如 govet 的 disable: ["printf"])。这时候再查 golangci-lint help linters 和 -v 日志,路径才对。


















