protobuf中的枚举缺省值应该为UNKNOWN
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.
protobuf中的枚举缺省值应该为UNKNOWN的更多相关文章
- java实现.net中的枚举
		Java 和 .net中的枚举不一样,在.net中,枚举是属于值类型的,而在java中确实引用类型的(其实就是一个特殊的类,enum默认集成java.lang.Enum类),所以在java中操作枚举类 ... 
- 21)pom 中的缺省值(default properties)
		1 引言 项目中build 时用到了maven-jar-plugin ,其中有一个 ${project.build.directory} <plugin> <artifactId&g ... 
- C# 中的枚举类型 enum (属于值类型)
		原文 C# 中的枚举类型 enum (属于值类型) C# 支持两种特殊的值类型:枚举和结构. 声明枚举:声明时要声明所有可能的值. using System; using System.Collect ... 
- Python 中的枚举类型~转
		Python 中的枚举类型 摘要: 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期.月份.状态等. 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表 ... 
- JavaScript中的枚举
		在JavaScript目前的版本中,没有枚举这个概念(当然,ECMA-262第三版中已经将enum作为关键字保留). 然而,如同JavaScript中没有class一样,但我们仍然可以通过间接的方式- ... 
- java枚举与.net中的枚举区别
		通过一段时间的项目实践,发现java中的枚举与.net中的枚举有很大的差别,初期造成了我对java中的枚举一些错误理解及部分有缺陷的应用,其实追其原因还是因为我会习惯性的认为java的枚举在作用以及定 ... 
- JAVA中的枚举小结
		枚举 将一组有限集合创建为一种新的类型,集合里面的值可以作为程序组件使用: 枚举基本特性 以下代码是枚举的简单使用: 使用values方法返回enum实例的数组 使用ordinal方法返回每个enum ... 
- scala 学习笔记(03) 参数缺省值、不定个数参数、类的属性(Property)、泛型初步
		继续学习,这一篇主要是通过scala来吐槽java的,同样是jvm上的语言,差距咋就这么大呢? 作为一个有.NET开发经验的程序员,当初刚接触java时,相信很多人对java语言有以下不爽(只列了极小 ... 
- 【转载】C++中的位拷贝和值拷贝
		---恢复内容开始--- 原文:C++中的位拷贝和值拷贝 原文:http://blog.csdn.net/liam1122/article/details/1966617 为了便于说明我们以Strin ... 
随机推荐
- 常见web安全隐患及解决方案
			Abstract 有关于WEB服务以及web应用的一些安全隐患总结资料. 1. 常见web安全隐患 1.1. 完全信赖用户提交内容 开发人员决不能相信一个来自外部的数据.不管它来自用户提交 ... 
- Java进阶篇(二)——抽象类、内部类
			之前在类和对象中我们说到了类的普通特性,本篇将介绍类的一些高级特性. 一.抽象类 抽象类:抽象类是只声明方法的存在而不去具体实现它的类.抽象类不能被实例化,也就是不能创建其对象.使用abstract关 ... 
- Centos常用命令之:文件操作
			在centos中,常用的文件操作命令有: ◇touch:建置新文件或者修改文件时间◇cat:从第一行开始显示文件内容◇tac:从最后一行开始显示文件内容,和cat相反◇nl:显示的时候,顺道输出行号◇ ... 
- Docker入门之--定制镜像
			1. 首先定制一个Web 服务器为例 1.1 启动镜像 执行下面命令 docker run --name webserver -d -p 80:80 nginx 1.2 查看容器和镜像状态 然后执行下 ... 
- [JSOI2007]合金
			Description 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的 原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新 ... 
- [HNOI2014]世界树
			题目描述 世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界.在这里,生存着各种各样的种族和生灵,他们共同信奉着绝对公正公平的女神艾莉森,在他们的信条里,公平是使世界树能够生生不息.持续运转的根本基 ... 
- 素数密度_NOI导刊2011提高(04)
			题目描述 给定区间[L, R](L <= R <= 2147483647,R-L <= 1000000),请计算区间中素数的个数. 输入 两个数 L 和 R. 输出 一行,区间中素数 ... 
- bzoj3944Sum
			3944: Sum Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5149 Solved: 1385[Submit][Status][Discuss ... 
- hdu3487 splay树
			Play with Chain Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ... 
- [bzoj1187][HNOI2007]神奇游乐园
			来自FallDream的博客,未经允许,请勿转载,谢谢, 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这是一 ... 
