使用相同库的两个项目中的依赖性问题

Dependency issue within two projects that use same lib

我有两个项目:

/myproject
/sharedproject

它们都由 dep 管理,我已经执行 go get -u github.com/golang/dep/cmd/dep 以获得最新的 dep 版本,并且在两个项目上执行 运行 dep ensure

当我 运行 myproject 我得到以下错误:

cannot use op (type *"myproject/vendor/github.com/go-openapi/spec".Operation) as type *"sharedproject/vendor/github.com/go-openapi/spec".Operation

出了什么问题,如何解决?

看起来情况是 sharedproject 供应商 github.com/go-openapi/spec 依赖项,而 myproject 从中获取 sharedprojectgithub.com/go-openapi/spec 依赖项 GOPATH.

现在当你在sharedproject中提到github.com/go-openapi/spec时,它指的是 vendor 目录中的包,在技术上与 GOPATH 中的相同包,即使它们具有相同的内容。所以当你通过一个 *github.com/go-openapi/spec.Operation 类型的变量从 myproject 到 a sharedproject中的函数,类型包与预期不符,编译失败

要解决此问题,请确保 sharedprojectmyproject 内销售。什么时候 你这样做,dep ensure 将在没有供应商的情况下放置 sharedproject 的副本 目录进入 myproject 的供应商目录。此后,myprojectsharedproject 都将使用 myproject 供应商目录中的 github.com/go-openapi/spec 包。

如果您经常更改 sharedproject 并且想要,这确实会使本地开发变得困难 立即在 myproject 中使用这些更改(在将更改推送到 Git 远程之前不能使用 dep)。我会通过复制来解决这个问题 在 sharedproject 手动进入 myproject 的供应商目录而不使用 dep(当然不包括供应商目录)。不过,请注意不要将那些手动复制的更改提交到 Git!