golangci-lint 可通过配置文件 skip-dirs 和 skip-files、命令行 --skip-dirs 参数、issues.ignore 正则或 linter 级 disable 规则,排除 vendor 目录及 protobuf/swag 等生成代码,避免误报和性能下降。

在使用 golangci-lint 检查项目时,vendor 目录和自动生成的代码(如 protobuf 生成的 *.pb.go、swag 生成的 docs/docs.go)常含大量非人工编写的代码,若不排除会导致误报、检查变慢甚至失败。
通过配置文件排除 vendor 和生成代码
在项目根目录创建 .golangci.yml 配置文件,写入以下内容:
```yaml
run:
skip-dirs:
- vendor
- "internal/generated"
- "api/swagger"
linters-settings:
goconst:
skip-files:
- ".*\.pb\.go$"
- "docs/.*\.go$"
gocyclo:
skip-files:
- ".*_test\.go$"
```
【skip-dirs 下的路径必须是相对于配置文件所在目录的相对路径】。如果 vendor 不在项目根目录下(比如被移到 GOPATH/src),该配置将失效,需改用命令行参数或全局 ignore。
用命令行参数临时跳过 vendor
执行检查时添加 --skip-dirs=vendor 参数:
golangci-lint run --skip-dirs=vendor
若同时要跳过多个目录,用英文逗号分隔:--skip-dirs=vendor,third_party,generated。注意这里不能写正则或通配符,只支持精确目录名匹配。
用正则忽略生成的 Go 文件
方法一:在 .golangci.yml 的 issues.ignore 字段中添加正则规则:
```yaml
issues:
ignore:
- ".*.pb.go$"
- "^docs/.*.go$"
- ".*_string.go$"
```
方法二:直接在命令行用 -e 忽略特定 linter 报出的路径问题(不推荐,粒度太粗):
golangci-lint run -e 'file:.*.pb.go'
方法三:对单个 linter 单独禁用——比如你知道 govet 在 generated/ 下总报错,可关闭它对该路径的检查:
```yaml
linters-settings:
govet:
checks:
- "all"
disable:
- "generated/.*"
```
这一步生效的前提是:你已在 run.skip-dirs 中排除了 generated 目录本身;否则 disable 路径匹配会因文件仍被扫描而无效。
验证排除是否生效
第一步:在 vendor/ 下故意写一行有问题的代码,例如 vendor/example.com/lib/foo.go 中添加 var x int = "hello";
第二步:运行 golangci-lint run --no-config --skip-dirs=vendor;
第三步:确认输出中不再出现该 vendor 文件的 error;
第四步:删掉 --skip-dirs=vendor 再跑一次,观察同一行是否立刻报错——这能反向验证排除逻辑是否起作用。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











