《protobuf》基础语法3

news2024/11/19 23:36:19

文章目录

  • 默认值
  • 更新规则
  • 保留字段
  • 未知字段

默认值

在反序列化时,若被反序列化的二进制序列中不包含某个字段,则在反序列化时,就会设置对应默认值。不同的类型默认值不同:

类型默认值
字符串“”
布尔型false
数值类型0
枚举型0
设置了repeated的字段空列表
  • ps:对于消息字段oneof字段any字段,有 has_ 方法来检测字段值是否被设置。

更新规则

  • 禁止修改任何已有字段的字段编号
  • 若是移除老字段,要保证不能再使用老字段使用过的编号。(正确做法是将其设为保留字段reserved)
  • oneof
    1.将一个单独的值更改为新oneof类型成员之一是安全和二进制兼容的
    2.将任何字段移入已存在的oneof类型是不安全的。

保留字段

message Reserved
{
	reversed 100;
	reversed 10 to 99;
	reversed "hello", "field";
	// 以上做法都可行
	// 注意:不要在⼀⾏ reserved 声明中同时声明字段编号和名称。reserved 102, "field5"

	// 设置保留项之后,下⾯代码会告警
	int32 field1 = 100; //告警:Field 'field1' uses reserved number 100
	int32 field2 = 11; //告警:Field 'field2' uses reserved number 101
	int32 hello = 102; //告警:Field name 'hello' is reserved
	int32 field = 103; //告警:Field name 'field' is reserved
}

这里给出更新例子:

有两个文件夹,client,server
在这里插入图片描述
server端写数据,client端读数据
在这里插入图片描述
下面对.proto文件中的已存在字段进行修改
在这里插入图片描述
然后把serve.cc相应增加代码修改一下

在这里插入图片描述
之后再编译链接,添加数据

在这里插入图片描述

注意看,查询到的年龄数据是180,显然protobuf里的字段是根据编号来控制的那么正确的做法是保留字段编号(reserved),以确保该编号将不能被重复使⽤

所以这就是为什么要引入reversed保留字的原因。

正确做法:
在这里插入图片描述
在这里插入图片描述
看到ww的年龄为0,这里就是本文开篇讲的类型默认值,那身高的数据跑哪里去了?

它在未知字段

未知字段

那么这里有个问题,什么是未知字段?

下面是类图
在这里插入图片描述

  1. 我们定义好的Message类People,调用People里的静态函数 GetReflection(),获得读写字段reflection
  2. 调用reflection中GetUnknownFields()函数,获得Message的People未知字段集合set
  3. 遍历set,获得未知字段unknow_field
  4. 最后根据未知字段的类型调用对应函数来打印对应值。
    在这里插入图片描述
  inline int number() const;  // 返回未知字段的编号
  
  inline Type type() const;  // 返回未知字段的类型

下面对应代码
在这里插入图片描述

运行结果:

在这里插入图片描述

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

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

相关文章

基于SSM的旅游网站设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

国庆看坚如磐石

坚如磐石上映了,可以在爱奇艺观看。 而博主在使用蓝牙耳机连接电脑的过程中,发现没有蓝牙开启选项,并且在服务的设备管理器中也没有找到,很明显这是缺少驱动导致的,因此便去联想官方网站下载对应的驱动。 这里可以输入…

二分查找:34. 在排序数组中查找元素的第一个和最后一个位置

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《算法》 文章目录 前言一、题目解析二、解题思路1. 暴力查找2. 一次二分查找 部分遍历3. 两次二分查找分别查找左右端点1.查找区间左端点2. 查找区间右端点 三、代码实现总结 前言 本篇文…

GCN详解

a ⃗ \vec{a} a 向量 a ‾ \overline{a} a 平均值 a ‾ \underline{a} a​下横线 a ^ \widehat{a} a (线性回归,直线方程) y尖 a ~ \widetilde{a} a a ˙ \dot{a} a˙ 一阶导数 a \ddot{a} a 二阶导数 H(l)表示l层的节点的特征 W(l)表示l层的参数 D ~ \widet…

Kafka客户端核心参数详解

这一部分主要是从客户端使用的角度来理解 Kakfa 的重要机制。重点依然是要建立自己脑海中的 Kafka 消费模型。Kafka 的 HighLevel API 使用是非常简单的,所以梳理模型时也要尽量简单化,主线清晰,细节慢慢扩展。 一、从基础的客户端说起 Kaf…

iphone怎么传大量照片到电脑,这四招你要学会

如果你喜欢用iPhone拍照、总会遇到要把大量照片从iPhone传输到电脑的情况,要是你对这方面不熟悉就很容易浪费时间。下面小编就介绍几种方法可以快速高效的传大量照片到电脑上去。 iPhone传输照片到电脑 方法一:使用iMazing传输 推荐度★★★★★ 有了i…

操作系统八股

1、请你介绍一下死锁,产生的必要条件,产生的原因,怎么预防死锁 1、死锁 两个或两个以上的进程在执行过程中,因争夺共享资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处…

【Spring Boot】日志文件

日志文件 一. 日志文件有什么用二. 日志怎么用三. ⾃定义⽇志打印1. 在程序中得到⽇志对象2. 使⽤⽇志对象打印⽇志3. ⽇志格式说明 四. 日志级别1. ⽇志级别有什么⽤2. ⽇志级别的分类与使⽤ 五. 日志持久化六. 更简单的⽇志输出—lombok1. 添加 lombok 依赖2. 输出⽇志3. lom…

(六)正点原子STM32MP135移植——内核移植

目录 一、概述 二、编译官方代码 三、移植 四、编译 一、概述 前面已经移植好了TF-A、optee、u-boot,在u-boot能正常跑起来的情况下,现在来移植内核。 二、编译官方代码 进入kernel目录 2.1 解压源码、打补丁 /* 解压源码 */ tar xf linux-6.1.28.…

【算法|动态规划No.13】leetcode LCR 166. 珠宝的最高价值

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

HVDC-MMC互连(1000MW,±320KV)使用聚合MMC模型进行优化的SPS模拟

微❤关注“电气仔推送”获得资料(专享优惠) 模型概述: 本示例展示了一个SimPowerSystems(SPS)模型,使用基于模块化多电平变换器(MMC)技术的电压源换流器(VSC&#xff09…

C++基础知识(四) -- 内联函数

概念 宏 提到内联函数就不得不提一下c语言里面的宏了,也可以说c的内联函数是从c语言里面的宏进化过来了的。 宏属于是暴力替换,过于生硬了,宏的缺点有如下 宏缺点: 1、不能调试 2、没有类型安全的检查 3、有些场景下非常复杂,容易…

数据结构之带头双向循环链表

目录 链表的分类 带头双向循环链表的实现 带头双向循环链表的结构 带头双向循环链表的结构示意图 空链表结构示意图 单结点链表结构示意图 多结点链表结构示意图 链表创建结点 双向链表初始化 销毁双向链表 打印双向链表 双向链表尾插 尾插函数测试 双向链表头插 …

《Spring Boot前世今生》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

VMware Workstation Pro详解

零、文章目录 VMware Workstation Pro详解 1、虚拟机介绍 (1)介绍 VMware Workstation Pro 是行业标准桌面 Hypervisor,使用它可在 Windows 或 Linux 桌面上运行 Windows、Linux 和 BSD 虚拟机。VMware官网地址:https://www.v…

【Python】如何使用PyInstaller打包自己写好的代码

使用PyInstaller打包自己写好的代码 零、需求 最近接到一个小单,需要批量修改文档内容,用Python做好后要打包成exe程序给客户的Win7电脑使用,此时需要用到PyInstaller打包自己的代码,想到还要有给用户试用的需求,所以…

第六章 数字化工作方法与应用

第一节 题目 A C 第二节 题目 A C B D A 右侧原因型,在左侧是对策型。主要记得右侧是原因行就可以了。 C B D 字面意思。 ABCD CD

笔训【day3】

目录 选择题 1、二维数组初始化 2、[]优先级高于* ​编辑 3、for初始化只执行一次​编辑 4、大小端 编程题 1、字符串中找出最长连续数字串 2、数组中出现次数超过一半的数 选择题 1、二维数组初始化 C:多初始化了一行 D:不能中间用两个逗号跳过。…

外包做了3个月,技术退步明显。。。。。

先说一下自己的情况,大专生,17年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…