在供应商目录中使用google.golang.org/grpc时遇到问题,出现以下错误
cannot use &metadata.HeaderMD (type *"google.golang.org/grpc/metadata".MD) as type *"project1/vendor/google.golang.org/grpc/metadata".MD in argument to grpc.Header
尽管我使用的是从gopath复制的必需版本的软件包,但仍收到错误消息。但是,当我从供应商删除golang.google.org/grpc文件夹时,我的项目从gopath中获取了依赖项,尽管一个gopath是我在供应商目录中的副本,而供应商目录中的所有其他库都能正常工作,但它可以正常工作除了grpc。
答案 0 :(得分:1)
创建project1/vendor/google.golang.org/grpc
时,这意味着对于project1/...
下的软件包,google.golang.org/gprc/...
的导入将透明地重新映射到供应商版本。
project1
以外的任何软件包都将继续导入非供应商的google.golang.org/grpc/...
软件包。尽管供应商的软件包可能是上游的副本,但Go将它们视为独立的软件包。因此它们包含的类型不相等。
最有可能发生的事情是,您的一个非供应商依赖项导入了grpc软件包,并在其公共API中使用了其类型。当您使用project1
中的API时,会得到上游类型,无法使用供应商的类型将其分配给变量。
有两个可能的解决方案:
使用您已经提供的东西来出售所有依赖项。
如果使用的是Go> = 1.11,请切换到newer Go module build system。这样一来,您就可以继续控制升级依赖项的时间,而无需使用project1/vendor/...
树来混淆类型系统。