直接 exclude vendor 和 build 目录最安全,因其仅在 ide 层面视觉隔离,避免误扫第三方代码、防止索引编译产物,且不干扰 go 工具链行为。

为什么直接 exclude vendor 和 build 目录最安全
GoLand 的 Excluded 状态是 IDE 层面的“视觉隔离”,不是文件系统隐藏,也不会影响 Go 工具链行为。它只让目录在项目树中变灰、不参与代码补全、Find in Path 和重构分析——这对 vendor、build、dist、gen 这类纯生成物非常合适。
-
vendor排除后,go vet和golint就不会误扫第三方代码(否则常报大量无关 warning) -
build或bin排除后,IDE 不会把编译产物当源码索引,避免跳转到 .exe/.out 文件里 - 别 exclude
internal、pkg、cmd—— 它们是 Go 包导入路径和依赖解析的语义锚点,IDE 依赖它们做正确跳转和错误提示 - 右键目录 → Mark Directory as → Excluded,状态写入
.idea/modules.xml,属于项目级配置,不随 Git 提交(除非你手抖加了.idea/)
gitignore 里该写什么,和 GoLand exclude 是两回事
.gitignore 控制的是 Git 提交行为,Excluded 控制的是 GoLand 显示行为。两者要配合,但不能混用。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 必须写进
.gitignore的:/bin/、/dist/、/build/、**/*.out、**/*.exe、.idea/、.vscode/ - 不要写进
.gitignore的:/go/pkg/mod/、/go/cache/—— 这些根本不该出现在项目目录下,是 GOPATH 全局路径,写进去说明本地环境已污染 -
vendor/是否忽略取决于团队策略:启用go mod vendor就提交;禁用就加/vendor/到.gitignore,同时在 GoLand 里也 exclude - 注意:Git 忽略 ≠ GoLand 隐藏。即使
build/被.gitignore了,只要没 exclude,GoLand 仍会把它当普通文件夹索引、补全、甚至跳转进去
用命令行过滤 vendor 的静态检查才真正生效
仅仅在 GoLand 里 exclude vendor,只影响 IDE 内置检查(比如编辑器右侧的波浪线)。但终端里跑的 go vet、staticcheck、gosec 等工具,默认仍会扫描所有子目录 —— 包括 vendor/。
- 正确做法是动态生成包路径列表:
go vet $(go list ./ | grep -v '/vendor/') - 更健壮的写法(防路径含空格):
go vet $(go list -f '{{if not .DepOnly}}{{.ImportPath}}{{end}}' ./ | grep -v '/vendor/') - 推荐塞进
Makefile:.PHONY: vet<br>vet: <br> go vet $$(go list ./ | grep -v '/vendor/')
- 别用
./...—— 它无差别包含vendor/,尤其在 CI 中容易因第三方代码触发误报或超时
排除逻辑递归生效,但单个文件得单独处理
GoLand 的 exclude 规则默认递归:一旦你 exclude 了 assets/,里面所有 assets/images/、assets/fonts/ 都自动被跳过索引。这点比手动删文件干净得多。
- 但如果你只想隐藏某个特定文件(比如
config.local.yaml),不能靠 exclude 目录,得右键该文件 → Remove from Project,或在.idea/modules.xml里手动加<sourcefolder url="file://$MODULE_DIR$/config.local.yaml" type="excluded"></sourcefolder> - 别用
os.Chmod(path, 0400)或attrib +h想“隐藏”目录 —— GoLand 完全不识别文件系统隐藏属性,Windows 上无效,macOS/Linux 上只是设只读,跟隐藏无关 - 如果项目树突然空白,先检查是否误 exclude 了根目录(比如右键整个项目点了 Excluded);恢复方法:右键项目名 → Mark Directory as → Unmarked










