我有两个项目:
/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
怎么了?如何解决?
答案 0 :(得分:2)
情况似乎是sharedproject
供应商github.com/go-openapi/spec
依赖项,而myproject
从sharedproject
和github.com/go-openapi/spec
都获得依赖
GOPATH
。
现在,当您在github.com/go-openapi/spec
中引用sharedproject
时,它是指
供应商目录中的软件包,在技术上与
GOPATH
中的相同程序包,即使两者具有相同的内容。所以当你通过一个
类型*github.com/go-openapi/spec.Operation
从myproject
到
sharedproject
中的函数,则该类型的程序包与预期的不同,并且编译失败。
要解决此问题,请确保将sharedproject
放在myproject
中。什么时候
您执行此操作后,dep ensure
会将sharedproject
的副本放入没有其供应商的位置
目录到myproject
的供应商目录中。之后,myproject
和sharedproject
都将使用github.com/go-openapi/spec
的供应商目录中的myproject
包。
如果您经常更改sharedproject
并且想要
立即使用myproject
中的更改(直到将更改推送到Git远程之前,才能使用dep
)。我会通过复制解决
将sharedproject
手动移至myproject
的供应商目录中,而无需使用dep
(当然不包括供应商目录)。小心不要将那些手动复制的更改提交到Git!