【问题标题】:Protocol Buffer: Changing field type from string to stringValue is backward compatible?协议缓冲区:将字段类型从字符串更改为字符串值向后兼容?
【发布时间】:2021-07-13 12:31:19
【问题描述】:

如果之前未使用字段 x,是否将字段类型从 string 更改为 stringValue 将向后兼容? 例如: 原始消息

message Student {
  string x = 1;
  string name = 2;
}

更改为:

message Student {
  google.protobuf.StringValue x = 1;
  string name = 2;
}

【问题讨论】:

    标签: java string kotlin protocol-buffers grpc


    【解决方案1】:

    这不是backwards-compatible change,因此无法保证解析之前设置字段x 的消息。

    但是,如果您可以保证 x 字段从不出现在任何需要反序列化的消息中,那么您会没事的,因为该字段将不会出现在序列化的消息中信息。请注意,这也适用于尝试反序列化新版本消息的旧代码。

    最后,使用新的字段编号通常更容易:

    message Student {
      google.protobuf.StringValue x = 3;
      string name = 2;
    
      reserved 1;
    }
    

    reserved 关键字确保永远不会再次使用此字段 ID,即使它已从生成的代码中删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-13
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 2017-12-29
      相关资源
      最近更新 更多