
Go 1.8 中 Glide 的 vendor 机制依赖严格的 GOPATH/src 子路径规范;若项目未置于 GOPATH/src/ 下(如 github.com/username/project),go build 将完全忽略 vendor/ 目录,导致“cannot find package”错误。
go 1.8 中 glide 的 vendor 机制依赖严格的 gopath/src 子路径规范;若项目未置于 `gopath/src/
在 Go 1.8 及早期版本中,vendor 目录并非全局生效,其作用范围严格受限于 Go 工具链对导入路径(import path)的解析逻辑。go build 只有在当前工作目录对应一个合法的、可推导出完整导入路径的 src 子目录时,才会启用 vendor 查找机制。
你当前的项目结构:
/Users/myName/go/src/
main.go ← ❌ 错误:顶层 src 下无组织化路径
vendor/ ← ❌ 无效:vendor 必须位于某具体 import path 目录下
这种扁平结构使 Go 编译器无法将 main.go 关联到任何有效导入路径(例如 github.com/yourname/myapp),因此它跳过 vendor/,转而按默认规则搜索 $GOROOT/src 和 $GOPATH/src —— 显然你的依赖只存在于 src/vendor/,自然报错。
✅ 正确做法:将项目移入符合 Go 包导入约定的子路径中,例如:
# 创建标准路径(以 GitHub 为例) mkdir -p $GOPATH/src/github.com/yourname/myapp # 移动代码 mv /Users/myName/go/src/main.go $GOPATH/src/github.com/yourname/myapp/ mv /Users/myName/go/src/vendor $GOPATH/src/github.com/yourname/myapp/ # 进入项目目录执行 cd $GOPATH/src/github.com/yourname/myapp glide install # 确保 vendor 更新正确 go build # ✅ 此时 vendor 生效
此时 go build 会识别当前目录对应导入路径 github.com/yourname/myapp,并自动优先从 ./vendor/ 解析所有依赖(包括 github.com/julienschmidt/httprouter),不再报错。
⚠️ 注意事项:
- Glide 已于 2019 年正式归档(deprecated),强烈建议升级至 Go Modules(Go 1.11+)。现代 Go 项目无需
GOPATH或vendor手动管理,go mod init+go mod tidy即可实现语义化版本控制与可重现构建。 - 若必须使用 Glide,请始终确保:
- 项目根目录 =
$GOPATH/src/(不能是src/直接下); -
glide.yaml与vendor/同级; - 构建命令在项目根目录下执行(而非
src/或其他父目录)。
- 项目根目录 =
? 总结:Go 1.8 的 vendor 是“路径感知型”机制,不是“目录存在即生效”。结构即契约——遵循 GOPATH/src/ 范式,是解锁 vendor、Glide 乃至 go get 行为一致性的前提。










