Protocol buffers 的吸引人的功能之一是它允许您扩展消息定义,而不会破坏使用旧定义的代码。对于枚举的情况根据文档 https://developers.google.com/protocol-buffers/docs/proto#enum:
具有枚举类型的字段只能将一组指定的常量之一作为其值(如果您尝试提供不同的值,解析器会将其视为未知字段)
因此,如果您扩展枚举并使用新值,那么旧代码中具有该类型的字段将是未定义的或具有其默认值(如果有)。
知道将来枚举可能会增加额外的值,处理这个问题的好策略是什么?
我想到的一种方法是定义枚举的“未定义”成员并将其设为默认成员,然后旧代码就会知道它已发送了无法解释的内容。这是明智的吗?有更好的方法来处理这种情况吗?
是的,最好的方法是使枚举中的第一个值类似于UNKNOWN = 0
。然后旧程序读取具有它们无法识别的枚举值的 protobuf 时会将其视为UNKNOWN
希望他们能够合理地处理这个问题,例如跳过该元素。
如果您想这样做,您还需要使枚举成为optional
not required
.
required
一般来说,意味着“我宁愿程序中止也不愿处理它不理解的东西。”
请注意,它必须是原始源中声明的第一个值- 仅为零值并不使其成为默认值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)