0

我有两个项目:

/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

出了什么问题以及如何解决这个问题?

4

1 回答 1

2

看起来情况是供应商sharedprojectgithub.com/go-openapi/spec依赖myproject 项同时从 .sharedprojectgithub.com/go-openapi/specGOPATH

现在,当您提到github.com/go-openapi/specin 时sharedproject,它指的是 vendor 目录中的包,这在技术上与 in 中的同一个包不同GOPATH,即使两者具有相同的内容。因此,当您将*github.com/go-openapi/spec.Operationfrom类型的变量传递给myprojectin 中的函数时sharedproject,该类型的包与预期的不同并且编译失败。

要解决此问题,请确保sharedproject在内部出售myproject。当您这样做时,dep ensure会将sharedproject没有其供应商目录的副本放入myproject供应商目录。在此之后,两者都myprojectsharedproject使用github.com/go-openapi/spec来自myproject供应商目录的包。

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

于 2018-09-12T19:21:36.270 回答