gpt4 book ai didi

java - 重命名 protobuf 中的枚举值 - 向后兼容

转载 作者:搜寻专家 更新时间:2023-11-01 02:36:16 24 4
gpt4 key购买 nike

我有一个原型(prototype)缓冲区:

enum Type {
UNDEFINED = 0;
SMALL = 1;
MEDIUM = 2;
BIG = 3;
}

最后一个值已更改(不是我更改的):

enum Type {
UNDEFINED = 0;
SMALL = 1;
MEDIUM = 2;
VERY_BIG = 3;
}

这种变化对我解析 protobuf 消息(包含 BIG 的消息)的能力有何影响?解析二进制编码消息或文本编码消息有何不同?

弃用 BIG 并引入 VERY_BIG 值的最佳做法是什么?

最佳答案

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

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

如果您使用的是 JSON 格式:您需要对其进行测试。我对 JSON 规则了解不够(我尽量避免 JSON 输出)。

一般来说,重命名不是一个好的选择。最好添加一个具有新的唯一值的新条目,然后简单地将旧条目标记为已弃用,但请注意,您可能仍需要旧值。

因为 EnumValueOptions 有一个 deprecated 标志,你应该能够使用 [deprecated=true] 来对抗旧值以将其标记为过时。

关于java - 重命名 protobuf 中的枚举值 - 向后兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50857940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com