IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    金庆发表于 2016-08-16 04:13:00
    love 0
    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.




    金庆 2016-08-16 12:13 发表评论


沪ICP备19023445号-2号
友情链接