goland 无法在 settings 中关闭 staticcheck 的 sa1019,因其内置检查与 golangci-lint 完全隔离;真正禁用需在 .golangci.yml 中配置 exclude-rules: [{linter: staticcheck, text: "sa1019"}]。

GoLand 本身不提供“自定义静态分析器规则过滤”的入口,所有规则开关、严重级别调整、路径排除都必须通过 golangci-lint 的 .golangci.yml 配置文件控制。 IDE 只负责调用和展示结果,不参与规则逻辑判断。
为什么不能在 GoLand 设置里关掉 staticcheck 的 SA1019?
GoLand 的 Settings → Editor → Inspections 里列出的 Go 检查项,实际是 JetBrains 自研的轻量级语义分析(如未使用变量、拼写错误),它完全不包含 staticcheck、errcheck 或 govet 的任何规则。这些第三方 linter 的启用/禁用、参数配置、忽略路径,全部由 golangci-lint 独立管理。你在 IDE 设置里看到的 “Go language level inspection” 和 “staticcheck” 是两套互不通信的系统。
- IDE 内置检查无法识别
go.mod类型信息,所以对类型断言、接口实现、弃用 API(SA1019)等语义级问题基本无能为力 - 你手动在 Settings 里关掉某项,只影响 IDE 自己的波浪线,
golangci-lint run仍会照常报错 - 真正要屏蔽 SA1019,必须在
.golangci.yml中写exclude-rules: [{linter: staticcheck, text: "SA1019"}]
如何让 GoLand 只显示 golangci-lint 允许的警告?
GoLand 默认会同时显示自己内置检查 + 外部 linter 结果,造成重复或冲突提示。要让 IDE 完全以 golangci-lint 为准,需关闭 IDE 自带的 Go 检查并绑定外部工具:
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- Settings → Editor → Inspections → Go → 取消勾选 “Go language level inspection” 及其全部子项(尤其是 “Unused symbol”、“Shadowing variable”)
- Settings → Tools → golangci-lint → 勾选 “Enable golangci-lint” 并确认 Path 指向正确的二进制(如
$GOPATH/bin/golangci-lint) - Settings → Editor → Inspections → 找到 “External Tools” → “golangci-lint” → 点击右侧齿轮图标 → 选择 “Show as error/warning” 而非 “Highlighting only”,确保严重级别与
.golangci.yml中定义一致 - 重启 GoLand,此时编辑器波浪线将 100% 来自
golangci-lint run --fast的输出
过滤特定文件或目录的正确写法
别信网上“在 GoLand File Watchers 里加 exclude pattern”的做法——那对 linter 无效。路径过滤必须落在 .golangci.yml 的 skip-dirs 或 run.skip-files 字段里,且注意匹配逻辑:
-
skip-dirs: ["mocks", "testdata", "vendor"]—— 匹配目录名,不依赖路径前缀,./internal/mocks和./mocks都会被跳过 -
run: skip-files: ["\.gen\.go$"]—— 用正则,必须写完整后缀,.gen.go不行,得写\.gen\.go$ - 想临时屏蔽某个文件的某条规则?在代码里加
//nolint:staticcheck // reason注释,golangci-lint会识别(但别滥用) - 别把
skip-dirs写成绝对路径,/home/user/project/mocks会导致 CI 失败,它只接受相对项目根目录的名称
最易被忽略的是:GoLand 不会自动重载 .golangci.yml 修改。改完配置后,必须手动触发 golangci-lint reload(右键项目根目录 → “Reload golangci-lint configuration”),否则 IDE 还在用旧规则缓存。










