You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Protobuf能否跳过部分字段编号,预留编号用于后续新增并固定末尾字段

在Protobuf中跳过字段编号预留后续字段是否可行?

完全可以这么做,Protobuf对字段编号的使用没有强制连续的要求,跳过编号预留位置是官方允许且常见的实践。

核心原因:

  • Protobuf的序列化和反序列化完全依赖字段编号,和字段在消息定义里的书写顺序无关,所以预留编号不会影响数据的传输和解析逻辑。
  • 预留一段编号区间后,后续新增字段时可以直接使用这些预留编号,不用调整现有字段的位置,刚好能满足你让特定字段始终处于定义末尾的需求。

对你示例的说明:

你给出的代码写法是合理的:

message SomeMessage {
  optional string field_1 = 1;
  optional string field_2 = 2;

  // 预留3-20的编号用于后续新增字段
  // skip some, so I can add them in the future;

  // 固定在末尾的oneof字段
  oneof details {
    optional string details_xyz = 21;
    optional string details_abc = 22;
  } 
}

后续如果需要新增普通字段,直接使用3到20之间的编号即可,完全不会改动到末尾的oneof部分,既能扩展消息结构,又能保持你想要的代码布局。

内容的提问来源于stack exchange,提问作者daydayup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 15:30:56