应于.golangci.yml中配置run.skip-dirs: ["generated", "mocks", "third_party", "migrations"],路径须相对项目根目录、区分大小写、不支持通配符;该设置对所有linter生效且跳过扫描,优于仅过滤输出的exclude-rules。

golangci-lint 配置中如何跳过 generated 目录
生成代码(如 protobuf、mocks、swag 生成的 docs.go)通常含大量静态检查误报,必须显式排除,否则 staticcheck 或 govet 会在这些文件里疯狂报错。
正确做法是在 .golangci.yml 的 run.skip-dirs 中声明路径:
run:
skip-dirs:
- "generated"
- "mocks"
- "third_party"
- "migrations"
注意:skip-dirs 是相对项目根目录的路径,不支持通配符或正则;路径名区分大小写,Generated 和 generated 是两个不同目录。
- 如果目录嵌套在子模块里(如
api/generated),需写全路径"api/generated" -
skip-dirs对所有 linter 生效,比单个 linter 的exclude更彻底 - 不要用
issues.exclude-rules替代——它只过滤报错输出,不跳过扫描,性能损耗仍在
VS Code 中 Go 插件怎么忽略 _test.go 文件的 exported 检查
VS Code 的 Go 插件默认调用 golangci-lint,但它的行为受两层控制:插件配置 + .golangci.yml。只改其中一层,波浪线仍会出现在 _test.go 里。
关键要同时做两件事:
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 在
.golangci.yml中加issues.exclude-rules,匹配测试文件中的导出警告:
issues:
exclude-rules:
- path: "_test\.go"
linters:
- "revive"
text: "exported.*should have comment.*"
- 确保 VS Code 设置里启用了
"go.lintTool": "golangci-lint",且工作区设置没覆盖成golint或govet - 修改后重启 VS Code 窗口(仅重载窗口不够),否则旧缓存会导致规则不生效
GoLand 里怎么让代码格式化不碰 vendor 目录
GoLand 默认对整个项目执行格式化(比如按 Ctrl+Alt+L),但 vendor/ 下的第三方代码不应被改动——既破坏 checksum,又可能引入 diff 噪音。
有两个层级可控制:
- 全局设置:进入
Settings → Tools → Actions on Save → Format on Save,点击Configure scope…,添加模式!vendor/**(注意开头的!表示排除) - 手动格式化时:右键点击
vendor目录 → 取消勾选Reformat Code,或直接跳过该目录操作 - 更稳妥的做法是,在项目根目录加
.editorconfig,写入[vendor/**]段并禁用所有格式化规则
注意:vendor/ 被 Git 忽略时,GoLand 有时会自动降级处理——但它仍可能被索引,所以显式排除最可靠。
CI 中 golangci-lint 排除目录失败的常见原因
本地能跳过 generated,CI 却报错,大概率是环境不一致导致配置未加载。
- 检查 CI 运行命令是否指定了配置文件路径:
golangci-lint run -c .golangci.yml—— 缺失-c参数时,它会回退到内置默认规则,skip-dirs完全失效 - 确认 CI 工作目录是否为项目根目录:若
cd到子目录再运行,skip-dirs: ["generated"]就找不到目标 - GitHub Actions 中使用
actions/checkout@v4后,默认不拉取.golangci.yml?错——它会拉取全部文件,但要注意是否被paths-ignore误过滤 - 镜像中
golangci-lint版本太老(如 v1.40 以下),skip-dirs字段不被识别,需升级到 v1.50+
真正容易被忽略的是:CI 环境里没有 GO111MODULE=on,导致 golangci-lint 以 GOPATH 模式运行,配置文件加载路径逻辑完全不同。










