【问题标题】:Differences between protoc-gen-go and protoc-gen-go-grpcprotoc-gen-go 和 protoc-gen-go-grpc 的区别
【发布时间】:2021-02-25 21:11:23
【问题描述】:

我对 protoc-gen-go 和 protoc-gen-go-grpc 有点困惑。我知道:

  • protoc-gen-go 包含用于序列化/反序列化 protobuf 消息的代码
  • protoc-gen-go-grpc 包含 gRPC 服务器和客户端的代码

但是,我正在使用以下命令

protoc -I $protodir --go_out=plugins=grpc:./genproto/ $protodir/v1/foo.proto

生成的foo.pb.go 包含消息序列化代码和 gRPC 服务器/客户端。另外,我的系统上只安装了protoc-gen-go。

我觉得这是 在 GO 中执行 gRPC 的旧方法,而 新方法 是 protoc --go_out=. --go-grpc_out=.

问题:

  1. 为什么这只能使用 protoc --go_out=.(为什么它还会生成 gRPC 客户端/服务器代码?)
  2. 使用一种方法与另一种方法相比有什么优势?

谢谢, 直流

【问题讨论】:

    标签: grpc-go


    【解决方案1】:

    旧方式正在使用github.com/golang/protobuf 模块。它带有protoc-gen-go,它生成protobuf消息的序列化和 grpc代码(使用--go_out=plugins=grpc时)。

    所谓的 new-way 是使用 google.golang.org/protobuf 模块 = 协议缓冲区的 Go 绑定的主要修订版。它带有一个不同的protoc-gen-go,不再支持生成 gRPC 服务定义。对于 gRPC 代码,Go gRPC project 开发了一个名为 protoc-gen-go-grpc 的新插件。 plugins 标志提供了一种以旧方式调用 gRPC 代码生成器的方法,现已弃用。

    重要提示:用户应努力为运行时库和用于生成 Go 绑定的 protoc-gen-go 插件使用相同的版本。

    更长的答案on stackoverflow。

    Release Notes 也解释了这一点。

    【讨论】:

      猜你喜欢
      • 2021-06-16
      • 1970-01-01
      • 2021-08-23
      • 2021-04-19
      • 2023-03-12
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多