【问题标题】:error while using google.golang.org/grpc from a vendor directory从供应商目录使用 google.golang.org/grpc 时出错
【发布时间】:2019-12-11 06:59:06
【问题描述】:

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

【问题讨论】:

    标签: go grpc grpc-go


    【解决方案1】:

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

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

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

    这个问题有两种可能的解决方案:

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

    2. 如果您使用 Go >= 1.11,请切换到 newer Go module build system。这将让您在升级依赖项时继续控制,而不会让 project1/vendor/... 树混淆类型系统。

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 2017-01-11
      • 2016-12-22
      • 2017-09-07
      • 2018-10-03
      • 2017-05-02
      相关资源
      最近更新 更多