在供应商目录中使用google.golang.org/grpc时遇到问题,出现以下错误

尽管我使用的是从gopath复制的必需版本的软件包,但仍收到错误消息。但是,当我从供应商删除golang.google.org/grpc文件夹时,我的项目从gopath获取了依赖项,尽管一个gopath是我在供应商目录中拥有的副本,而供应商目录中所有其他库都可以正常运行,但它可以正常工作除了grpc。

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

project1以外的任何软件包都将继续导入非供应商的google.golang.org/grpc/...软件包。尽管供应商的软件包可能是上游的副本,但Go会将其视为独立的软件包。因此它们包含的类型不相等。

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

有两个可能的解决方案:

  • 出售所有已利用您已经提供的依赖项的依赖项。

  • 如果您使用Go> = 1.11,请切换到较新的Go模块构建系统。这将使您能够继续控制升级依赖项的时间,而不必使用project1/vendor/...树来混淆类型系统。