首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原形向后兼容性中的enum值重命名

原形向后兼容性中的enum值重命名
EN

Stack Overflow用户
提问于 2018-06-14 12:48:21
回答 1查看 4.8K关注 0票数 8

我有个原型:

代码语言:javascript
复制
enum Type {
        UNDEFINED = 0;
        SMALL = 1;
        MEDIUM = 2;
        BIG = 3;
}

最后一个值被更改了(不是我):

代码语言:javascript
复制
enum Type {
        UNDEFINED = 0;
        SMALL = 1;
        MEDIUM = 2;
        VERY_BIG = 3;
}

这种改变对我解析protobuf消息(包含大消息的消息)的能力有什么影响?解析二进制编码消息和文本编码消息之间有区别吗?

什么是最好的实践,不推荐大,并引入VERY_BIG值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-14 18:44:16

如果您使用二进制protobuf格式,那么:没有问题。只有原始值作为varint发送,而不是作为名称发送。过去映射到BIG的数据现在将显示为VERY_BIG。你将无法区分两者之间。

更改模式和重新运行protoc可能会给您带来一些构建错误,直到您在自己的代码中修复相同的更改为止,但是protobuf本身不会在意,甚至不会注意到。

如果使用的是JSON格式,则需要对其进行测试。我对JSON规则知之甚少(我试图避免JSON输出)。

一般来说,重命名并不是一个好的选择。最好使用新的唯一值添加一个新条目,并简单地将旧条目标记为不推荐的,但请注意,您可能仍然期望旧值。

因为EnumValueOptions有一个deprecated标志,所以您应该能够对旧值使用[deprecated=true]来标记它的过时。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50857940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档