在GOPATH之外使用dep的正确方法?
在GOPATH之外使用dep的正确方法? 你好,
到目前为止,我一直在使用 Go 模块。我正在使用 Kubeless(Kubernetes 无服务器框架)实现一个 Golang Lambda 函数,而它只支持 dep(依赖项通过 Gopkg.toml 文件管理)。
我假设,如果我在 GOPATH 之外工作,就必须将 Go 模块与 dep 一起使用。我的理解对吗? 这感觉不太方便,因为两者可能都会想要创建 vendor 目录(我认为)。
谢谢
1 回复
在 GOPATH 之外使用 dep 是完全可行的,不需要依赖 Go 模块。dep 本身不要求项目必须在 GOPATH 内,但需要正确设置环境变量和项目结构。以下是具体步骤:
-
设置 GO111MODULE=off
确保禁用 Go 模块,因为 dep 与 Go 模块不兼容:export GO111MODULE=off -
初始化 dep 项目
在项目根目录运行dep init,这会生成Gopkg.toml和Gopkg.lock文件:cd /your/project/path dep init -
管理依赖
使用dep ensure拉取依赖到 vendor 目录:dep ensure添加新依赖时使用:
dep ensure -add github.com/example/pkg -
项目结构示例
假设项目路径为~/projects/myapp(不在 GOPATH 内):~/projects/myapp/ ├── main.go ├── Gopkg.toml ├── Gopkg.lock └── vendor/ (由 dep ensure 生成) -
构建和运行
直接使用go build或go run,工具链会优先使用 vendor 目录中的依赖:go build -o myapp .
关键点:
- 确保
GO111MODULE=off,否则 Go 工具会忽略 vendor 目录并尝试使用模块。 - dep 创建的 vendor 目录是标准行为,与 Go 模块的 vendor 机制类似但独立。
- 如果 Kubeless 要求特定依赖版本,可在
Gopkg.toml中通过[[constraint]]指定。
示例 Gopkg.toml 约束依赖版本:
[[constraint]]
name = "github.com/example/pkg"
version = "=v1.2.3"
这样即可在 GOPATH 外正常使用 dep,无需启用 Go 模块。

