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


GCT1015
浏览 98回答 1
1回答

慕桂英4014372

当您创建 时project1/vendor/google.golang.org/grpc,这意味着对于 下的包project1/..., 的导入google.golang.org/gprc/...将透明地重新映射到供应商版本。外部的任何软件包project1将继续导入非供应的google.golang.org/grpc/...软件包。虽然供应商的包可能是上游的副本,但 Go 将它们视为独立的包。因此它们包含的类型并不等效。最有可能发生的情况是,您的非供应依赖项之一导入了 grpc 包并在其公共 API 中使用其类型。当您使用来自 的 API 时project1,您将获得上游类型,该类型无法使用供应商类型分配给变量。此问题有两种可能的解决方案:供应所有使用您已供应的依赖项。如果您使用的 Go >= 1.11,请切换到较新的 Go 模块构建系统。这将使您能够继续控制何时升级依赖项,而不会因为project1/vendor/...树而混淆类型系统。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go