为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
GCT1015 2023-07-10 14:46:49
我在使用供应商目录中的 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。
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

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

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

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

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

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

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


查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信