golangci-lint 缓存独立于 go build/test 缓存,影响 lint 速度与结果复用;配置变更后异常、规则不生效或 CI 与本地结果不一致时需执行 golangci-lint cache clean 清理。

golangci-lint 的缓存是独立于 go build 和 go test 缓存的,它只影响 lint 运行速度和结果复用——但一旦缓存损坏或配置变更后未生效,就容易出现「改了配置却没效果」「跳过规则不生效」「本地能过 CI 却失败」这类问题。清理缓存不是高频操作,但必须知道怎么清、什么时候该清。
缓存状态怎么看?
运行命令查看当前缓存路径和命中情况:
golangci-lint cache status
输出里关键字段:
-
Cache dir:实际缓存目录(通常是$HOME/Library/Caches/golangci-lintmacOS /$HOME/.cache/golangci-lintLinux) -
Hits / Misses:如果Hits极高但行为异常,大概率是缓存没随配置更新而失效 -
Last clean:太久没清理(比如超过 1 周),建议手动清
清除缓存的正确命令
直接执行即可,无需加参数或指定路径:
立即学习“go语言免费学习笔记(深入)”;
golangci-lint cache clean
注意不是 cache clear 或 cache reset —— 错误命令会报 unknown command。这个命令会彻底删除整个缓存目录,下次 run 时重建。
常见误操作:
- 手删
$HOME/.cache/golangci-lint目录:可行,但不如用命令安全(某些版本会额外写锁文件) - 混用
go clean -cache:那是清理go build缓存,对golangci-lint无效 - 在 CI 中跳过清理:CI 环境通常无共享缓存,但若用了自建 runner 且复用 workspace,不清理可能导致上一次构建的缓存污染本次检查
什么情况下必须清理缓存?
以下任一场景发生,cache clean 是第一排查动作:
- 修改了
.golangci.yml中的skip-dirs或exclude-rules,但被跳过的文件仍报错 - 新增了
//nolint注释,但对应行依旧被检查 - 升级了
golangci-lint版本(如从 v1.52 → v1.53),部分 linter 行为异常或报错消失 - 切换 Go 版本(如从 1.22 → 1.23)后,
govet类检查结果不一致
缓存本身不存储 Go 源码,只存 AST 分析中间结果和检查器状态,所以清理开销极小,别犹豫。


















