
go 1.6 默认启用 vendor 机制,但要求 vendor 内部路径必须严格匹配完整导入路径(如 github.com/docker/libcompose),否则编译时会报 “cannot find package” 错误。
go 1.6 默认启用 vendor 机制,但要求 vendor 内部路径必须严格匹配完整导入路径(如 github.com/docker/libcompose),否则编译时会报 “cannot find package” 错误。
在 Go 1.6 中,vendor 机制被正式引入并默认启用(无需设置 GO15VENDOREXPERIMENT=1),其核心规则是:vendor 目录下的包路径必须与代码中 import 语句声明的完整导入路径完全一致。
例如,若你的代码中包含:
import "github.com/docker/libcompose/cli/command"
则 vendor 目录结构必须为:
your-project/ ├── vendor/ │ └── github.com/ │ └── docker/ │ └── libcompose/ │ ├── cli/ │ │ └── command/ │ └── ...
而 ❌ 错误的结构(如 vendor/docker/libcompose/)会导致 Go 工具链无法解析该导入路径,因为它只会在 vendor/
✅ 正确做法:
- 使用标准工具(如 govendor, dep, 或现代 go mod)初始化和管理 vendor;
- 手动复制时,务必保留完整的域名+组织名+项目名路径(即 vendor/github.com/docker/libcompose);
- 可通过 go list -f '{{.Dir}}' github.com/docker/libcompose 验证本地路径是否合规。
⚠️ 注意事项:
- GOROOT 和 GOPATH/src 中存在同名包时,vendor 仍优先——但前提是 vendor 路径正确;
- go build 会自动识别 ./vendor,无需额外参数;
- 若仍报错,可运行 go env 确认 GO111MODULE 未意外启用(Go 1.11+ 模式下 vendor 行为可能被覆盖);
- Go 1.14+ 已弃用 vendor 作为主流方案,推荐迁移到 go mod(但兼容 vendor)。
总结:vendor 不是“任意放就生效”的缓存目录,而是 Go 构建器按字面路径精确匹配的依赖快照目录。路径错误是 Go 1.6 vendor 报错最常见的原因——请始终确保 vendor/
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











