goland默认启用golint、go vet和staticcheck的核心规则,但staticcheck仅开启高危和中危问题;可在settings > editor > inspections > go中查看并管理所有激活检查项。

GoLand 默认开启哪些静态分析检查
GoLand 开箱即用就启用了大部分 golint、go vet 和 staticcheck 的核心规则,但不是全开——比如 staticcheck 默认只启用「高危」和「中危」问题,nilness(空指针推断)这类需额外启用。你能在 Settings > Editor > Inspections > Go 里看到所有已激活的检查项,带绿色对勾的是当前生效的。
常见误判点:某些检查(如 unused parameter)在测试函数或接口实现中会误报,这时别急着关全局,优先用 //nolint 注释局部忽略。
怎么手动启用 staticcheck 或 revive
GoLand 不内置 revive,但支持把它作为外部 linter 集成。先确保已安装:go install github.com/mgechev/revive@latest,然后在 Settings > Tools > File Watchers 或更推荐的路径 Settings > Languages & Frameworks > Go > Tools > Linters 中添加:
-
revive路径填你go bin下的实际位置(如$GOPATH/bin/revive) - Arguments 建议加
-config .revive.toml(如果项目根目录有配置文件) - 注意勾选「Run for files in GOPATH」和「Run for files outside GOPATH」,否则非模块路径下不触发
staticcheck 同理,但 GoLand 1.0+ 版本已原生支持它——只需在 Inspections > Go > Staticcheck 里打钩,无需额外配置二进制路径。
为什么有些错误不提示,但命令行 go vet 却报了
根本原因:GoLand 的静态分析默认只检查「当前打开的文件」或「当前模块内被引用的代码」,不会扫描整个 $GOPATH 或未 import 的包。而 go vet ./... 是全量扫描。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
解决办法:
- 右键项目根目录 →
Run Inspection by Name→ 输入go vet,可手动触发一次全项目检查 - 在
Settings > Editor > Inspections > Go > go vet里确认「Scope」设为All places(而非仅Current file) - 检查是否禁用了特定子检查,比如
printf或structtag类别被单独关闭了
另外,GoLand 对 go:generate 注释后的代码生成逻辑感知有限,若生成代码含 bug,IDE 往往不报——得靠 CI 阶段跑真实 go vet。
如何让分析结果实时显示且不卡顿
大型项目开启全部 linter 容易拖慢编辑体验。关键调整点:
- 关掉低价值检查:比如
ineffassign(无效赋值)在重构频繁时噪音极大,可禁用 - 限制 scope:把
Inspection Level设为Only current file或Open files only,避免后台扫描整个 module - 排除生成代码:在
Settings > Editor > File Types里,把*_test.go和gen_*.go加入「Ignored files and folders」 - 升级到 GoLand 2024.2+,新版对
staticcheck的增量分析做了优化,响应更快
真正容易被忽略的是:GoLand 的 inspection 缓存有时会 stale,改完配置后务必点 File > Invalidate Caches and Restart,否则新规则可能不生效。










