我在使用 vendor 目录中的 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 复制的包的必要版本,但我收到错误。但是,当我从 vendor 中删除 golang.google.org/grpc 文件夹时,我的项目从 gopath 获取依赖项,并且它工作正常,尽管一个 gopath 是我在 vendor 目录中的副本,并且 vendor 目录中的所有其他库都工作正常除了grpc。
最佳答案
当您创建 project1/vendor/google.golang.org/grpc
时,这意味着对于 project1/...
下的包,导入 google.golang.org/gprc/...
将透明地重新映射到 vendor 版本。
project1
之外的任何软件包都将继续导入非 vendor 的 google.golang.org/grpc/...
软件包。虽然 vendor 的包可能是上游的副本,但 Go 将它们视为独立的包。因此它们包含的类型并不等效。
最有可能发生的情况是,您的非供应依赖项之一导入了 grpc 包并在其公共(public) API 中使用其类型。当您使用 project1
中的 API 时,您将获得上游类型,该类型无法使用 vendor 类型分配给变量。
此问题有两种可能的解决方案:
供应所有利用您已供应的依赖项。
如果您使用的是 Go >= 1.11,请切换到 newer Go module build system 。这将使您能够继续控制升级依赖项的时间,而无需使用
project1/vendor/...
树来混淆类型系统。
关于go - 从 vendor 目录使用 google.golang.org/grpc 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57330027/