<p>golangci-lint可通过.golangci.yml中run.skip-files: - ".*_test.go$"全局跳过所有测试文件,配合skip-dirs排除testdata等目录,并支持行/函数/文件级//nolint注释精准禁用指定检查器。</p>

你想让 golangci-lint 在运行时自动跳过所有 *_test.go 文件,避免对测试代码执行静态检查(比如 unused 检查常误报 test 文件中的 mock 变量),又不想手动指定每个文件名或路径。
全局排除所有测试文件
在项目根目录的 .golangci.yml 中,于 run 节点下添加 skip-files 正则规则:
使用 - ".*_test\.go$" 匹配以 _test.go 结尾的任意文件名。
这一步必须写在 run: 下级,不能放在 linters-settings 或顶层;否则配置不生效。
按目录结构精准跳过 testdata 和 internal/test
有些项目将测试辅助数据放在 testdata/,或把集成测试逻辑放在 internal/test/。这些目录通常含大量非标准 Go 代码,强行检查会大量报错。
第一步:在 run 块中添加 skip-dirs 列表:
- testdata
- internal/test
- fixtures
注意:路径是相对于配置文件所在目录的相对路径,且不支持通配符(如 **/testdata 不合法);写错路径名会导致跳过失败,linter 仍会进入扫描并报错。
仅对特定测试文件禁用某类检查器
方法一:行级忽略 —— 在某一行测试代码末尾加注释
var mockDB *sql.DB //nolint:unused
方法二:函数级忽略 —— 在函数声明上方空行后加注释
//nolint:errcheck,staticcheck
func TestSQLInjectionEdgeCase(t *testing.T) {
方法三:文件级忽略 —— 在 *_test.go 文件顶部首行(必须是第一行,前面不能有空行或注释)添加:
//nolint:gocyclo,revive
⚠️ 这个注释必须严格顶格、无空格、无 BOM,否则 golangci-lint 不识别。
验证跳过是否生效
1. 执行 golangci-lint run --debug
2. 观察输出中 Skipped files 行是否列出你预期跳过的 xxx_test.go 或 testdata/ 路径
3. 若未出现,说明配置未加载或路径匹配失败;此时可临时加 --config=.golangci.yml 强制指定配置路径,排除查找失败可能
4. 修改配置后无需重启 IDE,VS Code 的 Go 插件会在保存后自动重载规则
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











