必须启用errcheck并配置.check-type-assertions: true和.check-blank选项,确保在.go文件中使用_ = os.remove等忽略error时能被检测到,否则静默失败风险高。

要在Go项目中真正捕获被忽略的error,必须让errcheck检查器生效并按需定制行为——它默认不报告类型断言和空白标识符赋值中的错误忽略,而这两处恰恰是静默失败的高发区。
确认errcheck已启用且配置文件位置正确
进入项目根目录,确保当前路径下存在 【go.mod】 文件;若不存在,请先运行 go mod init your-module-name 初始化模块。
在该目录下新建文件 【.golangci.yml】(注意开头是点,后缀是 .yml,不是 .yaml 或 .json);任何其他命名或存放位置都会导致配置完全失效。
在文件中写入基础启用段:
linters: enable: - errcheck
这一步不能省略:golangci-lint 安装后默认只开 govet 和 errcheck 两个,但 errcheck 实际是否启用取决于配置文件内容——没写 enable 就等于关着。
开启对类型断言中 error 忽略的检查
方法一:启用类型断言错误检查
在 .golangci.yml 中添加 linters-settings → errcheck → check-type-assertions: true:
linters-settings: errcheck: check-type-assertions: true
这样写之后,a := b.(MyStruct) 这类没有用 ok 模式或 error 检查的断言就会被报错。否则 errcheck 默认放过它们,而这类断言失败时 panic 是常见线上故障源头。
方法二:关闭空白标识符赋值检查(谨慎选择)
如果团队允许 num, _ := strconv.Atoi(s) 这种写法,可显式禁用该检查:
check-blank: false
⚠️ 注意:设为 false 并不意味着鼓励忽略 error,而是把判断权交给 code review;一旦开启 check-blank: true,所有 _ = xxx 和 _, _ := 都会触发 errcheck 报告。
验证配置是否真正起效
第一步:确保当前 shell 的 PATH 包含 golangci-lint 可执行文件路径,执行 which golangci-lint 应返回非空结果;若为空,说明命令根本不可用,后续全无意义。
第二步:在项目根目录下运行完整命令:
golangci-lint run --config=.golangci.yml --timeout=1m
第三步:故意在某 .go 文件中写一行 _ = os.Remove("/tmp/test"),保存后再次运行上一步命令。
第四步:观察输出——若看到类似 errcheck: error returned from os.Remove is not checked 的提示,说明配置已生效;若无任何输出,立即回头检查 .golangci.yml 是否在 go.mod 同级、缩进是否全为空格、字段名是否拼错。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











