我收到一封protobuf邮件-
message Sample{
string field1 = 1;
string field2 = 2;
string field3 = 3;
}
这些消息以二进制格式存储在数据存储中。 因此,如果我要删除上述消息中的任何已定义字段,是否会导致从数据存储区反序列化消息时出现任何问题?
我收到一封protobuf邮件-
message Sample{
string field1 = 1;
string field2 = 2;
string field3 = 3;
}
这些消息以二进制格式存储在数据存储中。 因此,如果我要删除上述消息中的任何已定义字段,是否会导致从数据存储区反序列化消息时出现任何问题?
不。尽管可以将字段标记为保留,以便没有人以不兼容的方式重用它,但是删除字段也可以。具有旧数据(带有字段)的新代码将静默忽略它;由于新数据proto3
中的所有内容都是隐含的optional
,因此只会加载没有新字段的旧代码。当proto2
是一个问题时,这在required
中更是一个问题。另一种选择是离开该字段,但用[deprecated = true]
进行标记-它仍然存在并被填充,但是某些工具会使用该语言/框架针对该平台的过时标记来标记该成员。