这次终于搞清楚了,关于 protoc 工具的小问题

protoc 工具可以干什么?

protoc 工具可以 通过相关插件 将 .proto 文件编译成 CC++GolangJavaPythonPHP 等多种语言的代码。

本文主要讨论通过 protoc 生成 Golang 代码,例如我们常见的命令:

protoc -I . --go_out=xxx

想了解更多参数,执行 protoc --help 查看。

遇到的小问题

一、如何知道 protoc 使用的什么插件?

例如:--go_out 使用的是什么插件?

最终了解到使用的是 protoc-gen-go 插件。

例如:--go-grpc_out 使用的是什么插件?

最终了解到使用的是 protoc-gen-go-grpc 插件。

也通过使用其他插件,总结出一个规律:

  • go_out 对应 protoc-gen-go 插件;

  • go-grpc_out 对应 protoc-gen-go-grpc 插件;

  • ...

  • *_out 对应 protoc-gen-* 插件;

二、例如新老项目使用的 protoc-gen-go 插件版本不同怎么办?

我能想到两个方案解决:

  1. 通过两个环境去完成,例如,打两个 docker 环境,新项目在一个环境中生成,旧项目在另一个环境中生成。

  2. 通过区分插件名称去完成,例如,将新版本命名为 protoc-gen-go-new,将旧版本命名为 protoc-gen-go-old,生成新版本时使用 --go-new_out,生成旧版本时使用 --go-old_out

很显然,第 2 个方案成本更小。

三、protoc-gen-goprotoc-gen-go-grpc 这两个插件有什么不同?

当使用参数 --go_out=plugins=grpc:xxx 生成时,生成的文件 *.pb.go 包含消息序列化代码和 gRPC 代码。

当使用参数 --go_out=xxx --go-grpc_out=xxx 生成时,会生成两个文件 *.pb.go*._grpc.pb.go ,它们分别是消息序列化代码和 gRPC 代码。

为什么会存在这两种生成方式?它们有什么不同?这是我查询到的资料:

83e3417e38cf444eb3862c8f396861cb.jpeg

原文:https://stackoverflow.com/questions/64828054/differences-between-protoc-gen-go-and-protoc-gen-go-grpc

四、protoc 和 protoc-gen-xxx 插件 和 grpc 和 protobuf 在选择哪个版本组合使用时,有没有推荐组合的版本号?

例如,组合的版本号为:

  • protoc v3.18.1

  • protoc-gen-go v1.27.1

  • protoc-gen-go-grpc v1.1.0

  • grpc v1.41.0

  • protobuf v1.27.1

关于上述的版本号,有没有官方文档推荐使用的版本组合?

有朋友们知道吗?欢迎留言评论 ~ 

5691a5fd66c0ea7b734bef40e71fefa2.jpeg

97178fa8aa462d567bcd0c4434dad4de.png

761a1a2a8d3c8c66b781342c056446b9.jpeg

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值