
Glide 依赖管理要求项目必须位于 $GOPATH/src/ 下的规范路径(如 github.com/username/projectname),glide init 和 glide install 才会在项目根目录生成 vendor/,使 go build 正确识别并使用本地依赖。
glide 依赖管理要求项目必须位于 `$gopath/src/` 下的规范路径(如 `github.com/username/projectname`),`glide init` 和 `glide install` 才会在项目根目录生成 `vendor/`,使 `go build` 正确识别并使用本地依赖。
在 Go 1.5+ 引入 vendor 机制后,go build 会自上而下查找 vendor 目录:首先检查当前包所在目录的父级路径中是否存在 vendor/,然后逐级向上回溯,直到 $GOPATH/src/ 根目录;但绝不会跨项目扫描(例如不会去 $GOPATH/vendor/ 或其他项目的 vendor/)。因此,Glide 创建的 vendor/ 必须位于你项目源码的直接子目录下,而非全局 $GOPATH/vendor。
✅ 正确做法:
- 将项目代码置于标准 GOPATH 路径中:
mkdir -p $GOPATH/src/github.com/yourname/myproject cd $GOPATH/src/github.com/yourname/myproject
- 初始化 Glide 配置:
glide init # 生成 glide.yaml 在当前目录(即 myproject/ 下)
- 安装依赖:
glide install # 在 myproject/vendor/ 下拉取依赖
此时项目结构为:
$GOPATH/src/github.com/yourname/myproject/ ├── glide.yaml ├── main.go └── vendor/ └── github.com/ └── some/dependency/
✅ 构建时 go build 即可自动命中 myproject/vendor/ 中的依赖,无需额外参数或环境变量。
⚠️ 常见错误与注意事项:
- ❌ 不要将项目放在
$GOPATH/src/外(如桌面或~/myproject),否则glide install生成的vendor/对go build不可见; - ❌ 不要手动创建
$GOPATH/vendor/—— Glide 不使用该路径,Go 工具链也忽略它; - ✅ Glide 的
vendor/是项目局部的,完全隔离,不同项目可使用不同版本的同一依赖; - ? 若已误操作,清理方式:删除错误位置的
glide.yaml和vendor/,将代码移至正确$GOPATH/src/...路径后重新glide init。
总结:Go 的 vendor 查找是基于源码路径的局部相对查找,而非全局注册。Glide 只是自动化这一约定的工具——它的核心价值在于确保 vendor/ 出现在 go build 能够“看到”的唯一合法位置:你的项目源码根目录下。










