从供应商目录中使用Google.golang.org/grpc时出错



我在供应商目录中使用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。

创建project1/vendor/google.golang.org/grpc时,这意味着对于project1/...下的软件包,google.golang.org/gprc/...的导入将透明地重塑为供应商版本。

project1之外的任何软件包都将继续导入非供应商google.golang.org/grpc/...软件包。虽然供应商包可能是上游的副本,但请将它们视为独立的软件包。因此它们所包含的类型不是等效的。

最有可能发生的事情是,您的一个非供应商依赖项会导入GRPC软件包,并在其公共API中使用其类型。当您从project1使用该API时,您将获得无法使用供应商类型分配给变量的上游类型。

解决此问题的两个可能解决方案:

  1. 供应商使用您已经供应商品的所有依赖项。

  2. 如果您使用的是GO> = 1.11,请切换到较新的GO模块构建系统。这将使您在升级依赖关系的情况下继续控制,而无需让project1/vendor/...树混淆类型系统。

相关内容

最新更新