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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Monero】Wallet RPC | Wallet CLI | 门罗币命令行查询余额、种子、地址等命令方法教程

ubuntu22.04 首先在运行daemon,详细安装运行教程可参考:The Monero daemon (monerod) ./monerodWallet CLI run ./monero-wallet-cli如果还没有钱包就根据提示创建钱包即可 输入密码 查询余额 balance查询种子 seed其他可执行命令操作&#xff1…

力扣-349两个数组的交集

两个数组的交集 已解答 简单 相关标签 相关企业 给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[…

C 语言练习分享

c语言的一些小练习&#xff0c;可以多思考&#xff0c;多看看 1. 按下面对公式求sum的值&#xff1a;Sum1-23-45-6……99-100 #define _CRT_SECURE_NO_WARNINGS 1//要写到代码第一行 #include <stdio.h> #include <string.h> #include <math.h> void main()…

LVS(Layout versus schematic)比的是什么?

概述 LVS不是一个简单地将版图与电路原理图进行比较的过程&#xff0c;它需要分两步完成。第一步“抽取”&#xff0c;第二步“比较”。首先根据LVS提取规则&#xff0c;EDA 工具从版图中抽取出版图所确定的网表文件&#xff1b;然后将抽取出的网表文件与电路网表文件进行比较…

跳槽多次未成功,问题源自何处?

众所周知&#xff0c;2023年市场很难&#xff01;看着企业们纷纷裁员&#xff0c;甚至连内推这个后门都走不通&#xff01;哪怕有面试&#xff0c;都是屡屡碰壁&#xff0c;你想清楚问题出在哪了吗&#xff1f;&#x1f62d;“求职不得&#xff0c;夜不能寐&#xff1b;三更半夜…

GEE土地分类——基于遥感影像数据的不同作物的分类

简介 这里我们首先要更改原始代码的中的影像和研究区矢量的问题,这个为了防止我们计算的过程超限,建议先将我们的研究区影像和样本点先存在自己的assets中,然后导入到新的脚本中。然周本文就是对其进行影像进行归一化处理,然后进行样本点值提取至点,然后训练样本点,进行…

学习刷题-14

3.29 贪心算法 跳跃游戏 II 给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 贪心的思路&#xff0c;局部最优&#xff1a;当前可移动距离尽可能多…

【4】单链表(有虚拟头节点)

【4】单链表&#xff08;有虚拟头节点&#xff09; 1、虚拟头节点2、构造方法3、node(int index) 返回索引位置的节点4、添加5、删除6、ArrayList 复杂度分析(1) 复杂度分析(2) 数组的随机访问(3) 动态数组 add(E element) 复杂度分析(4) 动态数组的缩容(5) 复杂度震荡 7、单链…

【软考高项范文】论信息系统项目的进度管理

项目进度管理是保证项目的所有工作都在指定的时间内完成的重要管理过程。营理项目进度是每个项目经理在项目管理过程中耗时耗力最多的一项工作,项目进度与项目成本、项目质量密不可分。 请以“信息系统项目的进度管理”为题,分别从以下三个方面进行论述: 1.概要叙述你参与…

3.两数相加 - 链表

文章目录 题目简介题目解答代码&#xff1a; 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 两数相加 相关的讲解&#xff01;&#x1f600; 题目简介 题目解答 通过题目给的第一个示例来解析 图解如下&#xff1a; l1的2和l2的5首先相加变为7 这里相加结果为7…

Ubuntu18.04安装wireshark

安装wireshark 环境Ubuntu18.04 1.使用root用户进行安装 2.将 wireshark-dev/stable PPA 添加到系统的软件源列表中。系统就可以从该PPA获取Wireshark软件包及其更新了。 apt-add-repository ppa:wireshark-dev/stable3.确保你系统上的软件包信息是最新的&#xff0c;这样在…

Yarn - macOS 上安装使用

文章目录 关于 YarnYarn 工作流程安装检查安装、查看版本 常用命令 关于 Yarn Yarn 是一款成熟的开源软件包管理器&#xff0c;用于管理 JavaScript 项目中的依赖关系。 官网&#xff1a;https://yarnpkg.comgithub : https://github.com/yarnpkg官方文档&#xff1a;https:/…

高炉项目中DeviceNET到Ethernet的转换奥秘

在工业自动化的世界中&#xff0c;高炉项目中的数据通信至关重要。其中DeviceNET和Ethernet作为两种主流的网络协议&#xff0c;扮演着不可或缺的角色。它们之间的转换不仅仅是技术上的桥梁&#xff0c;更是实现信息高效传递的关键。今天&#xff0c;我们就来揭开从DeviceNET到…

LeetCode-热题100:394. 字符串解码

题目描述 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的&#xff1b;输入字符串中没有额外的空格&am…

数据结构——lesson13排序之计数排序

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

Java 中的单例模式

引言&#xff1a; 在 Java 编程中&#xff0c;单例模式是一种常见的设计模式&#xff0c;它保证一个类只能创建一个实例&#xff0c;并提供一个全局访问点。单例模式在很多场景下都非常有用&#xff0c;比如线程池、日志系统、数据库连接池等。本文将详细介绍 Java 中单例模式的…

操作教程|在MeterSphere中通过SSH登录服务器的两种方法

MeterSphere开源持续测试平台拥有非常强大的插件集成机制&#xff0c;用户可以通过插件实现平台能力的拓展&#xff0c;借助插件或脚本实现多种功能。在测试过程中&#xff0c;测试人员有时需要通过SSH协议登录至服务器&#xff0c;以获取某些配置文件和日志文件&#xff0c;或…

知乎:多云架构下大模型训练,如何保障存储稳定性?

知乎&#xff0c;中文互联网领域领先的问答社区和原创内容平台&#xff0c;2011 年 1 月正式上线&#xff0c;月活跃用户超过 1 亿。平台的搜索和推荐服务得益于先进的 AI 算法&#xff0c;数百名算法工程师基于数据平台和机器学习平台进行海量数据处理和算法训练任务。 为了提…

Python学习笔记 - Python 2.x 和 Python 3.x 之间的重要区别

接手了一个基于Python 2.x编写的程序,想要将它们统一到新的Python 3.x的环境下,有些东西会报错,所以查了查,并且记录一下。 Python 除法运算符 首先需要注意除法运算符,移植代码时,最好使用浮点值(如 7.0/5 或 7/5.0)来获得预期结果。 print(7 / 5 ) print(-7 / 5) …

在 Linux中解压,压缩命令详解

在 Linux中解压&#xff0c;压缩命令详解 在 Linux中解压&#xff0c;压缩命令详解 &#x1f427;&#x1f4bb;摘要引言正文内容解压命令详解1. 解压 .zip 文件unzip 命令 2. 解压 .tar.gz、.tar.bz2、.tar.xz 文件tar 命令 3. 解压其他格式的压缩文件gzip 命令bzip2 命令 压…