我有两个项目:
/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有什么不对,怎么解决呢?
发布于 2018-09-12 19:21:36
看起来情况是sharedproject供应商提供github.com/go-openapi/spec依赖,而myproject从GOPATH获得sharedproject和github.com/go-openapi/spec依赖关系。
现在,当您在sharedproject中引用sharedproject时,它引用了供应商目录中的包,这在技术上不同于GOPATH中的同一个包,即使两者都有相同的内容。因此,当您将*github.com/go-openapi/spec.Operation类型的变量从myproject传递给sharedproject中的函数时,类型的包与预期的不同,编译失败。
要解决这个问题,请确保sharedproject在myproject中得到了满足。当您这样做时,dep ensure会将一个没有供应商目录的sharedproject副本放到myproject的供应商目录中,之后,myproject和sharedproject都将使用myproject供应商目录中的github.com/go-openapi/spec包。
如果经常更改sharedproject并希望立即在myproject中使用这些更改,这确实会使本地开发变得困难(在将更改推送到Git远程之前,不能使用dep )。我会手动地将sharedproject复制到myproject的供应商目录中,而不使用dep (当然不包括供应商目录),但是要小心不要将那些手工复制的更改提交到Git!
https://stackoverflow.com/questions/52299402
复制相似问题