protobuf中的枚举缺省值应该为UNKNOWN

    xiaoxiao2026-04-05  4

    protobuf中的枚举缺省值应该为UNKNOWN (金庆的专栏) proto3中的枚举值为了与proto2兼容,要求缺省值固定为第1个,值为0。 proto2中并没有规定对范围之外的枚举值的处理, 而proto3中已规定无定义的枚举值反序列化后再次序列化保持原值。 lua pbc 中对无定义的枚举值做了忽略处理,效果等同于变成缺省值。 希望未来版本能符合proto3的规定。 协议定义中添加新的枚举值是常有的,客户端服务器协议版本不同时, 就会出现无定义的枚举值。 如果缺省值为UNKNOWN, 则所有新增或已删除枚举值都按缺省值处理就不会出错。 缺点是要求所有枚举值都要显式赋值,不能使用缺省值了。 例如,原来定义为     enum LoginResult {        OK = 0;        ERR_SERVER_FULL = 1;  // 服务器已满        ERR_VERIFY_FAIL = 2;  // 验证失败        ERR_MULTI_LOGIN = 3;  // 重复登录    } 多数情况下,仅需缺省OK就行了。 但是服务器再添加一个 ERR_NOT_READY, 客户端因为使用旧版协议, 遇见ERR_NOT_READY最终返回缺省值 OK.
    转载请注明原文地址: https://ju.6miu.com/read-1308541.html
    最新回复(0)