golangci-lint 报 errcheck: Error return value of resp.Body.Close is not checked,那一行半年前就改成了下划线赋值,照样被拦下来。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,配置里打开了 check-blank,errcheck 连显式赋给下划线的错误也判成未处理,团队照着旧结论批量补下划线,改完一点效果都没有,命中数反而随代码量上涨。
「golangci-lint errcheck」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
# .golangci.yml errcheck: check-blank: false golangci-lint run --disable-all -E errcheck ./...
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
改完隔一天再看一次,当场正常不代表能稳住。
具体做法是,先确认配置文件里 check-blank 的实际取值;确实要忽略的用单行 nolint 标注;关闭开关前统计一遍现有命中数量。
最后用这个标准收尾,本地和 CI 的 errcheck 命中数一致,新代码不再因为下划线写法被拦。
