更新消息类型
如果一个已有的消息类型不再满足需要- 例如, 想让消息格式增加额外的字段 - 但是依然希望原有格式创建的代码可以继续使用, 不用担心. 可以很简单的更新消息类型而不用破坏现有的代码.只需要记住下面的规则:
- 不要修改任何现有字段的数字标签
- 新增的字段应该为 optional (可选)的或 repeated (重复)的,这意味着使用旧消息格式序列化后的消息都可以被新生成的代码解析。同样新代码创建的消息可以被老代码解析,不过解析时新增的字段会被忽略。
- 不需要的字段可以删除,但是要求在更新后的消息类型中原来的标签数字不再使用。可以考虑重命名这个字段, 或者添加前缀OBSOLETE_, 或者保留标签, 以防止你的.proto文件将来被不小心重用这个数字。
- int32, uint32, int64, uint64, 和 bool 是完全兼容的 – 这意味着可以将一个字段的类型从这些类型中的一个修改为另外一个而不会打破向前或者向后兼容.如果一个数字解析时不匹配相应的类型, 那么效果会和在c++里面做类型转换一样(例如64位数字被作为32位整型读取, 将被转换为32位)。
- sint32 和 sint64 是彼此兼容的,但是和其他整型类型不兼容。
- string 和 bytes 是兼容的, 如果bytes是有效的UTF-8。
- 嵌入式的消息和bytes兼容, 如果bytes包含这个消息的编码后的内容。
- fixed32 兼容 sfixed32, 而 fixed64 兼容 sfixed64。