goland中golangci-lint需显式启用staticcheck等关键检查器、.golangci.yml须与go.mod同级、ide工作目录必须为模块根目录三者缺一不可,否则检查静默失效。

golangci-lint 必须显式启用且路径对齐才生效
GoLand 默认只跑 govet 和 errcheck,staticcheck、unused、revive 这些真正能揪出 SA1019(调用弃用函数)、死循环、未使用变量的检查器全被关着——不是 IDE 不支持,是根本没开。
关键动作有三步:
- 确保
golangci-lint二进制版本 ≥ v1.52.0(旧版对revive规则支持不全) -
.golangci.yml必须放在含go.mod的目录下,不能在src/或子模块里乱放 - GoLand 设置里勾选「Use config file」后,必须填
.golangci.yml(不是golangci.yml或.golangci.yaml),且不能写相对路径如./.golangci.yml
验证是否生效:在 IDE 中打开一个含未使用变量的 .go 文件,终端手动执行 golangci-lint run --config=.golangci.yml --no-config ./path/to/file.go;如果终端报错但 IDE 不标红,说明插件路径或工作目录没对齐。
IDE 启动时工作目录必须是 go.mod 所在目录
GoLand 不会自动把项目根目录当工作目录。如果启动时工作目录不是 go.mod 所在位置,golangci-lint 就解析不出 module path,配置文件加载失败,所有检查静默失效。
常见表现:
- 设置里明明填了
.golangci.yml,但保存后没任何红线提示 - 项目结构是 monorepo,父目录有
.golangci.yml,但子go.mod目录下没单独放一份,子模块检查完全不触发 - 通过桌面图标或快捷方式启动 GoLand,而非从终端
goland .启动,导致工作目录错位
解决办法:用终端进入项目根目录(即含 go.mod 的目录),运行 goland . 启动 IDE;或在 GoLand 的「Help → Edit Custom Properties」里加 idea.working.directory=. 强制对齐。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
CI 和 pre-commit 必须设退出码,否则等于没卡
很多团队把 golangci-lint run 塞进 CI 却没加 --issues-exit-code=1,结果一堆 unused 或 errcheck 错误,流水线照样绿色通过。
实操要点:
- GitHub Actions 推荐加
--out-format=github-actions,让错误直接挂 PR - pre-commit 钩子里可加
--fix(仅限支持自动修复的 linter,如gofumpt),但 CI 里慎用,避免格式化冲突 - 本地开发建议绑定到保存动作:
"go.lintOnSave": "package",问题实时浮现
注意:golangci-lint 默认 exit code 是 0,即使发现严重问题也不中断构建,这点和 ESLint 等工具行为不同,容易被忽略。
TS/JS 代码检查走的是 ESLint,不是 golangci-lint
GoLand 里 TypeScript 和 JavaScript 的语法检查完全独立于 Go 的 lint 流程,靠的是 ESLint + @typescript-eslint/parser,不是 golangci-lint 管的。
要让它生效,必须满足:
- 已安装 Node.js,并在 GoLand 设置中正确配置本地 Node.js 解释器
- 项目根目录下有
eslint.config.js(v9+)或.eslintrc.js(v8-),且其中parser设为@typescript-eslint/parser - 捆绑插件「JavaScript and TypeScript」已启用(默认开启,但有人会手误关掉)
如果 .ts 文件没报错提示,先检查 node_modules/.bin/eslint 是否存在,再确认 GoLand 的「Settings → Languages & Frameworks → JavaScript → Code Quality Tools → ESLint」里路径是否指向项目本地的 eslint 二进制。










