GoLand默认不启用errcheck,必须在项目根目录的.golangci.yml中显式启用并确保golangci-lint路径有效、GO111MODULE=on、go.mod可解析且GOROOT配置正确,否则静默失效。

GoLand 默认不启用 errcheck,必须手动在 .golangci.yml 中显式开启并正确集成,否则编辑器里根本不会标出未处理的 error 返回值。
为什么 GoLand 不报未处理 error
这不是 IDE 问题,而是分析器配置缺失或失效:errcheck 不在 golangci-lint 默认启用列表里,且 GoLand 的 Static analyzers 设置若路径错误、配置未加载或 gopls 崩溃,就会静默跳过检查。
-
errcheck必须写进项目根目录的.golangci.yml的linters.enable列表,不能只靠 IDE 界面勾选 - GoLand 的 Settings → Go → Static analyzers 中的
golangci-lint可执行路径必须有效(点 Test 要返回版本号) - 如果
gopls进程崩溃(常见于模块解析失败),整个分析链会中断,Problems 工具窗口空、Alt+Enter无修复项 - 误用
~或相对路径指定.golangci.yml位置会导致配置被忽略——必须是绝对路径,且文件名严格为.golangci.yml
配置 .golangci.yml 启用 errcheck
在项目根目录(即含 go.mod 的目录)创建或编辑 .golangci.yml,确保包含以下最小必要配置:
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
linters:
enable:
- errcheck
- staticcheck
- govet
- unused
disable:
- golint
run:
timeout: 2m
linters-settings:
govet:
checks: ["all"]
skip-dirs:
- vendor
- testdata
- mocks-
errcheck单独启用就能捕获os.Open()、http.Get()等调用后忽略error的情况 -
staticcheck必须显式加进去,它才报SA1019(弃用 API)、SA1021(空循环)等语义级风险,仅errcheck不够 -
govet: checks: ["all"]是关键:默认govet不开unmarshal、atomic等子项,漏掉高危反序列化隐患 - 删掉任何残留的
golint配置,它已归档,存在会导致golangci-lint启动失败
GoLand 里确认分析器真在跑
改完配置后不是“保存就生效”,必须触发重载并验证运行态:
- 重启 GoLand 后,先新建一个空白
.go文件写package main,确认基础语法提示正常(排除 SDK 或索引损坏) - 打开原项目,看 Problems 工具窗口右上角是否显示 “Running analysis…” 或开始滚动日志
- 在代码中故意写
os.Open("missing.txt")但不接error,应立刻在行尾出现黄色波浪线,悬停提示 “Error return value is not checked” - 若没反应,打开 Event Log(底部状态栏右角小图标),搜
lint或analysis,常有隐藏错误如 “failed to load config” 或 “golangci-lint exited with code 1” - 终端进项目根目录,手动运行
golangci-lint run --fast,看是否输出errcheck相关警告——这是最直接的验证方式
容易被忽略的硬性依赖点
即使配置全对,errcheck 也依赖两个底层事实成立,缺一不可:
-
GO111MODULE=on:Settings → Go → Go Modules 中必须勾选Enable Go modules integration,否则golangci-lint无法解析 import,直接报 “no Go files in directory” -
go.mod可解析:终端运行go list -m all应成功返回所有模块,若卡住或报错,先go mod download补全依赖再重启 IDE - GOROOT 必须准确:Settings → Go → GOROOT 必须和终端执行
which go的路径一致,指向你实际使用的 Go 安装目录,不是空值或旧版本 - 不要在
vendor/模式下指望它工作——golangci-lint不支持 GOPATH mode,必须走模块路径
真正卡住 errcheck 生效的,往往不是配置语法,而是模块环境没拉通、gopls 没挂载、或 .golangci.yml 放错了目录层级。每次改动后,优先验证 golangci-lint run 命令行输出,比盯着 IDE 等待更可靠。

















