【protobuf】ProtoBuf——proto3语法详解、更新消息、更新规则、保留字段、未知字段、前后兼容性、选项option、选项分类、常用选项列举、设置自定义选项

ProtoBuf

在这里插入图片描述

  

5. proto3语法详解

5.8 更新消息

  在 Protobuf(Protocol Buffers),更新消息通常是指对已定义的消息类型进行修改或扩展。Protobuf 具有良好的向前和向后兼容性。

  如果现有的消息类型已经不再满足我们的需求,例如需要扩展一个字段,在不破坏任何现有代码的情况下更新消息类型必须遵循如下规则。

  

5.8.1 更新规则

  规则 1:禁止修改任何已有字段的字段编号。

  示例:假设有个 Person 消息类型,其中 name 字段的编号是 1,就不能将其改为其他数字。

message Person {
   
  string name = 1;
}

  

  规则 2:int32,uint32,int64,uint64 和 bool 是完全兼容的。可以从这些类型中的一个改为另一个,而不破坏前后兼容性。 若解析出来的数值与相应的类型不匹配,会采用与 C++ 一致的处理方案(例如,若将 64 位整数当做 32 位进行读取,它将被截断为 32 位)。

  示例:原本是 int32 的 score 字段可以改为 int64 。

message Game {
   
  int64 score = 1;  // 之前可能是 int32
}

  

  规则 3:sint32 和 sint64 相互兼容但不与其他的整型兼容。

  示例:sint32 的 count 可以改为 sint64 。

message Data {
   
  sint64 count = 1;  // 之前是 sint32
}

  

  规则 4:string 和 bytes 在合法 UTF-8 字节前提下也是兼容的。

  示例:description 字段可以在 string 和 bytes 类型间切换。

message Info {
   
  bytes description = 1;  // 之前可能是 string
}

  

  规则 5:bytes 包含消息编码版本的情况下,嵌套消息与 bytes 也是兼容的。

  示例:假设有个嵌套的 Version 消息,version_info 字段可以是 bytes 类型。

message Version {
   
  int32 major = 1;
  int32 minor = <
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鳄鱼麻薯球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值