enable是白名单模式,只运行明确列出的检查器;disable是黑名单模式,在默认集上禁用指定项;二者不可共存,推荐始终使用enable精确控制。

你想在Go项目中精确控制哪些代码检查规则生效,避免默认启用全部linter导致大量误报或干扰开发节奏,就必须搞清楚enable和disable在.golangci.yml中的真实作用与互斥逻辑。
理解enable和disable的根本区别
enable是白名单模式:只运行你明确列出的检查器,其余一概不执行;disable是黑名单模式:在默认启用集基础上,禁用你指定的几个。两者【不能共存于同一份配置文件中】,否则golangci-lint会直接报错退出。
日常推荐始终使用enable——它让你对项目实际启用的检查器有完全掌控,不会因golangci-lint版本升级悄悄加入新linter而意外触发告警。
正确配置enable列表
第一步:在项目根目录(与go.mod同级)创建.golangci.yml文件。
第二步:在linters字段下使用enable键,逐行列出你要启用的检查器名称:
linters:
enable:
- govet
- errcheck
- staticcheck
- revive
- gofmt
注意:golint已被官方弃用,revive才是现代替代;gofmt虽属格式化工具,但作为linter启用后支持--fix自动修复,比单独调用gofmt更契合CI流程。
禁用特定检查器的两种写法
方法一:直接在disable列表中写入名称(仅当未使用enable时有效)
linters:
disable:
- unused
- dupl
- lll
方法二:用disable-all + enable组合实现“先全关再选开”(等效于enable,但冗余)
linters:
disable-all: true
enable:
- govet
- errcheck
【不要混用disable-all和disable】——前者关闭所有内置linter,后者只禁用部分;若同时出现,行为不可预测,v1.53.0起已明确拒绝加载。
验证配置是否生效
执行golangci-lint run --no-config --out-format=tab | head -n 5,强制忽略任何配置文件,查看默认启用项。
再执行golangci-lint run --config=.golangci.yml --out-format=tab | head -n 5,对比两行输出中“enabled linters”字段内容是否严格匹配你配置的enable列表。
如果第二行出现你没写的检查器(比如gosimple),说明配置路径错误、文件名拼错为.golangci.yaml、或当前工作目录不在go.mod同级——【.golangci.yml必须与go.mod在同一目录】,否则完全不加载。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











