GoLand配置golangci-lint必须满足三硬条件:手动指定可执行路径、显式加载与go.mod同级的.golangci.yml、在配置中显式启用staticcheck/unused/errcheck等关键linter,缺一则静默失效。

GoLand 里配 golangci-lint 不是点开开关就完事——路径错、配置没加载、关键 linter 关着,三者任缺其一,IDE 就当它不存在,连 errcheck 都不报。
手动指定 golangci-lint 可执行路径,别信自动检测
GoLand 不会从 $PATH 或 ~ 展开中自动找二进制,即使终端能跑 golangci-lint version,IDE 也可能静默跳过检查。
- 进 Settings → Go → Static Analysis,看
Executable字段是否为空或含~ - 点击右侧
+→Browse,选绝对路径:/opt/homebrew/bin/golangci-lint(macOS Homebrew)、$HOME/go/bin/golangci-lint(go install)、C:\Users\you\go\bin\golangci-lint.exe(Windows) - 务必点
Test按钮验证:成功返回版本号才算通过,否则 Problems 窗口永远空着
.golangci.yml 必须显式加载且与 go.mod 同级
IDE 不会自动读项目根目录下的配置文件,不显式指定 = 没配。名字、位置、格式三者错一个,staticcheck 和 unused 全部失效。
- 文件名必须是
.golangci.yml(不是.golangci.yaml,也不是golangci.yml) - 必须放在
go.mod所在目录;monorepo 多 module 项目,每个go.mod目录都得有一份 - 在 Settings → Go → Static Analysis 中勾选
Use configuration,输入框填.golangci.yml(推荐相对路径)或绝对路径 - 配置内容需满足缩进全空格、顶层字段对齐,例如
linters和run并列,不能嵌套
显式启用 staticcheck、unused、errcheck 等关键 linter
默认只开 govet 和 errcheck,staticcheck(揪弃用 API、死循环)、unused(未使用变量/函数)、gocyclo(圈复杂度)全被关着——你看到的“没报错”,其实是根本没跑这些检查。
立即学习“go语言免费学习笔记(深入)”;
- 若未启用配置文件,直接在 Settings 表格中勾选对应 linter 行
- 若已启用
.golangci.yml,表格会变灰,此时必须在配置里写明:enable: ["staticcheck", "unused", "errcheck", "govet"] -
govet要开全:linters-settings: govet: checks: ["all"](Go 1.21+),旧版需列具体项如["printf", "atomic"] - 禁用已归档工具:
disable: ["golint", "maligned"],避免冲突或静默失败
保存即检查需靠 File Watcher,不是改个设置就行
GoLand 没有类似 VS Code 的 "go.lintTool" 一键保存触发机制。试图在 Go → Tools 填路径,只会让下拉菜单多一个选项,完全不影响保存行为。
- 进 Settings → Tools → File Watchers → + → Custom
-
Name:golangci-lint-save;File type:Go;Scope:Project Files -
Program: 填绝对路径或确保PATH可达的golangci-lint -
Arguments:run --config=$ProjectFileDir$/.golangci.yml --no-config --fast --timeout=60s --issues-exit-code=0 $FilePathRelativeToProjectRoot$ - 勾选
Auto-save edited files before running,否则未保存的修改不会被扫到
最常被忽略的是工作目录和配置加载时机:GoLand 启动时若不在含 go.mod 的目录下,$ProjectFileDir$ 解析就会错,--config 参数形同虚设;而 --no-config 是为了防止它去读其他地方的默认配置干扰你的规则。


















