协议缓冲区:将字段类型从字符串更改为字符串值向后兼容?
Posted
技术标签:
【中文标题】协议缓冲区:将字段类型从字符串更改为字符串值向后兼容?【英文标题】: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;
【问题讨论】:
【参考方案1】:这不是backwards-compatible change,因此无法保证解析之前设置字段x
的消息。
但是,如果您可以保证 x
字段从不出现在任何需要反序列化的消息中,那么您会没事的,因为该字段将不会出现在序列化的消息中信息。请注意,这也适用于尝试反序列化新版本消息的旧代码。
最后,使用新的字段编号通常更容易:
message Student
google.protobuf.StringValue x = 3;
string name = 2;
reserved 1;
reserved
关键字确保永远不会再次使用此字段 ID,即使它已从生成的代码中删除。
【讨论】:
以上是关于协议缓冲区:将字段类型从字符串更改为字符串值向后兼容?的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB如何将数组中的字段类型从字符串更改为数组并保持原始值