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

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

所谓的版本就是下面这个东西proto.ProtoPackageIsVersion4或者proto.ProtoPackageIsVersion3:

目的

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

需要做什么

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

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: