golang grpc和protobuf的版本降级问题(version4 -> version3)

本文讲述了如何在旧项目中适配protobufv1.3.5,解决因version4变化导致的init函数问题,包括版本回退、清理缓存、下载并编译旧版本protoc-gen-go工具的过程。
摘要由CSDN通过智能技术生成

最后更新于2024年3月28日 10:57:52

简中没查到类似的文章。一点小事闹麻了,搞了一天,特意发出来造福大家。

所谓的版本就是下面这个东西proto.ProtoPackageIsVersion4或者proto.ProtoPackageIsVersion3:
在这里插入图片描述

目的

为了适配旧代码,里面有一些默认的注册type的init函数,在version4里面是不会自动生成的:
话说回来我应该可以手动register吧?不过那样太麻烦了。
11

需要做什么

1、需要把github.com/golang/protobuf这个库的版本退回v1.3.5
2、需要使用相应版本的protoc工具来生成。

1. 版本回退

Revert to Earlier Version of protoc-gen-go

使用命令:

go get -u github.com/golang/protobuf@v1.3.5

修改后go.mod文件如下:
在这里插入图片描述
这个过程中很痛苦很折磨,go get的时候各种没响应啥的,要自己多试几次,反正目标就是把这个旧版本的protobuf库go get下来:
我试了1挂代理;2使用下面命令:

go clean -modcache
rm go.sum

go mod tidy 报错:verifying …: checksum mismatch

这其中还有个地方要注意,就是新版本的protobuf会多出一个“google.golang.org/protobuf@1.33.0”这个库。其实github.com/golang/protobuf和google.golang.org/protobuf两个库,后者是包含前者的,最直观的就是当使用了google.golang.org/protobuf的时候,github.com/golang/protobuf在goland里面会被划掉表示deprecated了。但是在我们这种version3的时间节点上,google.golang.org/protobuf应该还没开发出来呢吧……至少我没去管这个库。

2. 编译对应版本的protoc工具

一共有三个protoc工具,分别是protoc、protoc-gen-go、和protoc-gen-go-grpc。

三个工具的关系是:人工调用protoc工具即可,protoc工具会根据不知道什么路径配置,自动去调用protoc-gen-go和protoc-gen-go-grpc两个工具来生成文件

protoc-gen-go-grpc我用的版本1.2.0,protoc我电脑上有一个3.6.1版本,我就拿来用了,没有额外编译,如果需要生成的话请另外百度谷歌;

关键是protoc-gen-go这个工具,必须用旧版本才能编译出version3的proto文件来,获取工具的方法如下,参考了Need steps to download and install an older version of protoc-gen-go #1090

先把https://github.com/golang/protobuf的官方库clone下来,根目录有个protoc-gen-go,类似这样:
在这里插入图片描述
放张图是因为类似名字的库太多了,tmd万一我哪天都找不到了那就搞笑了。
cd到这个protoc-gen-go目录下,然后:

git checkout 7e65e51
go build

可以./protoc-gen-go --version,这个工具的版本太早了,甚至连获取版本号都会报错。
在这里插入图片描述
这样就生成这个protoc-gen-go工具了,把它放到protoc工具可以读到的路径下即可,我是放在~/go/bin目录下了。

最后生成需要的golang文件就行了,这句话没啥特别地方,大差不差,最多就是个路径的区别:

/usr/bin/protoc -I=. --go_out=. --go-grpc_out=. --proto_path=. ./*.proto
  • 26
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值