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

时间:2018-09-12 16:06:27

标签: go dependency-management dep

我有两个项目:

/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

怎么了?如何解决?

1 个答案:

答案 0 :(得分:2)

情况似乎是sharedproject供应商github.com/go-openapi/spec依赖项,而myprojectsharedprojectgithub.com/go-openapi/spec都获得依赖 GOPATH

现在,当您在github.com/go-openapi/spec中引用sharedproject时,它是指 供应商目录中的软件包,在技术上与 GOPATH中的相同程序包,即使两者具有相同的内容。所以当你通过一个 类型*github.com/go-openapi/spec.Operationmyprojectsharedproject中的函数,则该类型的程序包与预期的不同,并且编译失败。

要解决此问题,请确保将sharedproject放在myproject中。什么时候 您执行此操作后,dep ensure会将sharedproject的副本放入没有其供应商的位置 目录到myproject的供应商目录中。之后,myprojectsharedproject都将使用github.com/go-openapi/spec的供应商目录中的myproject包。

如果您经常更改sharedproject并且想要 立即使用myproject中的更改(直到将更改推送到Git远程之前,才能使用dep)。我会通过复制解决 将sharedproject手动移至myproject的供应商目录中,而无需使用dep(当然不包括供应商目录)。小心不要将那些手动复制的更改提交到Git!