必须在项目根目录的settings→directories中将vendor设为excluded并重启ide,而非右键mark as excluded;全局搜索需在file types中配置ignore列表;覆盖率需用-coverpkg显式指定包。

必须排除 vendor 目录,否则索引永远快不起来——它不是慢一点,而是让 GoLand 反复解析几万个第三方包里的测试文件、文档和非 Go 资源,CPU 占满却无报错。
为什么 Exclude 目录不等于跳过索引
右键目录 → “Mark Directory as Excluded” 只是隐藏文件,不阻止索引。GoLand 仍会扫描 vendor 下所有 *_test.go、.md、.yml,构建符号表并通知 gopls。真正生效的路径只有一条:Settings → Directories → 项目根目录 → 点右侧 Excluded 按钮 → 输入 vendor(注意:不带斜杠,不写 ./vendor 或 vendor/)→ 重启 IDE。
-
vendor必须是项目根目录下的直接子目录;若在src/vendor,则填src/vendor - 多个目录要分别添加:
bin、pkg、testdata、.git,不能用通配符(如**/vendor) - 排除后
Ctrl+Click仍能跳转进vendor—— 这是正常行为,模块解析逻辑由go工具链控制,和索引无关
全局搜索(Find in Path)为何还搜 vendor
Excluded 设置对 Ctrl+Shift+F 完全无效。全局搜索只认 Settings → Editor → File Types → “Ignore files and folders” 里的配置,格式为分号分隔的纯目录名:vendor;testdata;node_modules(不要加斜杠,不要带路径)。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 填成
vendor/或./vendor就失效 - 如果项目用了
go.work,vendor仍可能被纳入搜索范围——此时更推荐删掉vendor目录本身(前提是支持离线构建) - 临时需要更细粒度控制?搜索弹窗右上角点
File mask,填入:!**/test*/** && !**/*_test.go(仅本次生效)
覆盖率统计也得手动“白名单”
GoLand 的 Coverage 面板默认把 vendor 和所有第三方包都插桩统计,结果失真。解决方式不是“排除”,而是用 -coverpkg 显式列出你真正要测的包:
- 在 Run Configuration → Program arguments 中填:
-coverpkg=myproject,myproject/internal,myproject/handler(myproject是go.mod里声明的 module 名,不是目录名) - 多个包用英文逗号分隔,不能有空格,结尾不加
./ -
vendor不在列表中,且没被任何已列包import,就不会出现在 coverage 报告里 - 如果用了
replace指向本地路径,那个路径也必须加进-coverpkg
并发索引参数不配 vendor 排除就是白调
indexing.concurrency=2 这类参数藏在 idea.properties 文件里,但单独调它毫无意义——只要 vendor 还在索引范围内,再多线程也只是并发地重复扫同一堆无用文件。
- 必须先完成
vendor的Excluded设置,并确认图标变灰 - 再启用
go.work支持(Settings → Go → Modules → 勾选 Enable Go workspaces support) - 最后才改
indexing.concurrency(推荐值 2~4),三者缺一不可
真正卡住的从来不是单个开关,而是 vendor 是否被正确排除、go.work 是否启用、并发数是否匹配硬件——漏掉任意一个,索引就还在后台默默重复扫描同一片代码。










