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

最后更新于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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 07:50:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 07:50:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 07:50:04       82 阅读
  4. Python语言-面向对象

    2024-03-29 07:50:04       91 阅读

热门阅读

  1. loopvar 改动不同版本的影响-基础循环

    2024-03-29 07:50:04       44 阅读
  2. 包和权限修饰符

    2024-03-29 07:50:04       41 阅读
  3. Pytorch:torch.stack 和 torch.as_tensor

    2024-03-29 07:50:04       39 阅读
  4. llama.cpp 编译安装@Ubuntu

    2024-03-29 07:50:04       41 阅读
  5. 设计模式一详解

    2024-03-29 07:50:04       37 阅读
  6. 每天一个数据分析题(二百三十七)

    2024-03-29 07:50:04       42 阅读
  7. admin端

    admin端

    2024-03-29 07:50:04      32 阅读
  8. 滑动模块-力扣-下一个排列

    2024-03-29 07:50:04       47 阅读
  9. 汇编开关atapi设备

    2024-03-29 07:50:04       40 阅读
  10. 实时数据库测试-汇编小程序

    2024-03-29 07:50:04       34 阅读
  11. openEuler 22.03 安装 .NET 8.0

    2024-03-29 07:50:04       40 阅读