Proto3使用指南
1.proto3 默认值
ProtoBuf对象的get方法永远不会有null,如果没有设置,会生成对应的默认值
如果属性值是一个message,pb会为这个属性生成一个hasXXX方法,可以用这个方法判断是否设置了这个属性
对于其他属性,比如string,uint32等等,如果没有设置,get出来的将会是空值,比如string就是"",uint32就是0,此时无法区分是没有设置还是设置了默认值,需要业务自行约定,比如传一个"-1"等特殊的值标识
2.通过wrappers封装类解决proto3默认值和传参无法区分的问题
//比如说我的message字段中需要存在一个uint32类型的数据,0代表业务上的真实数据 //这时候可以用google.protobuf.UInt32Value封装类型来代替uint32 message xxxDTO { //... google.protobuf.UInt32Value source_type = 9; //... }
在rpcService中,可以通过getDefaultInstance的方式去判断服务调用方是没有传参数,还是传参和默认值相等
if (xxxDTO.getSourceType() == UInt32Value.getDefaultInstance()) { //... }
如果调用方未传,那么if条件成立,否则即便传参在数值上等于uint32的默认值0,也不会检查通过,代表服务端检测到用户传参,可以进行正常的业务判断和操作
注意,不能使用xxxDTO.getXXX()==NULL的方式去判断,proto3相比于proto2去掉了很多NULL默认值改为default_instance
3.proto3踩坑汇总
3.1 message的默认值不是NULL,而是DEFAULT_INSTANCE
3.2 不支持一个proto文件中,多个枚举中定义相同的枚举常量名 比如以下定义会报错 IDLE is already defined in "xxx"
enum Enum1 { IDLE = 0; RUNNING = 1; } enum Enum2 { IDLE = 5; RUNNING = 6; }
3.3 proto标量值类型映射关系表
3.4 proto3常用基本类型默认值
对于string,默认值是一个空string
对于byte,默认值是一个空的bytes
对于bool,默认值是false
对于数值类型,默认值是0
对于枚举类型,默认值是第一个定义的枚举值,且必须为0
热门推荐
-
苹果的iMac台式一体机新手指南如何使用
鼠标键盘的开关看心情,只要不移动鼠标一般不会耗多少电(真心觉得触控版比鼠标好用)。2、切换回macO... -
Proto3使用指南
= 6;}3.3 proto标量值类型映射关系表3.4 proto3常用基本类型默认值对于... -
默认网关有什么用?我应当怎么填写默认网关和DNS呢?
因为如果一改,路由器会因为连接到错误的网关而连不上网;而电脑的网关可以随着路由器的内网地址之一「19... -
如何打开抖音默认静音功能
抖音为避免公共场合打开时打搅他人,上线了“开启默认静音”功能。首先用户得将App更新 至 21.6.... -
路由器默认网关
路由器默认网关 1、路由器IP地址的名称,与本地网络连接的机器必须把向外的流量传递到此地址中以超出本... -
不能错过的硒鼓推荐指南
一、硒鼓怎么选?硒鼓等同于(感光鼓)是一个产品不同叫法,采用铝打磨而成的基本材料,它的存在类似跟”心... -
手机信号弱的解决方法
1)在“设置--关于手机--状态信息--SIM卡信息”就可以查看到手机信号强弱的状态信息;2)在拨... -
电脑显卡如何查看 电脑显卡查看方法介绍【详解】
要查看自己电脑里面的显卡是什么样的?电脑显卡怎么看 呢?下面的和大家分享一下在Windows7系统中... -
诺基亚三防手机800DS不完全保修指南
各位客官:友情提醒在官方渠道购买诺基亚手机,我指的是有发票那种。木有发票的话售后就比较麻烦,而且客服... -
怎么添加默认程序
一般会在电脑第一次打开这种类型的文件时会这种窗口,我们只需选择想要打开这种文件的应用,并勾选「始终使... -
SIM卡安装教学指南
为什么SIM卡装上了却显示无服务,SIM卡怎么装不进卡槽,为什么取卡针插入却弹不出卡槽……今天小E给... -
怎么换浏览器
默认浏览器吧?Windows10是在设置-应用-默认应用里更改。Windows7是控制面板。如果是下... -
优盘写保护怎么办
系统有写保护或U盘损坏造成的,解决方法如下:1、首先在电脑中,右键单击U盘。2、打开的右键菜单栏中,... -
怎么修改默认浏览器
1首先你要看看你的浏览器快捷方式是不是被篡改了。快捷方式的属性里面检查一下目标是不是一个干净的exe... -
怎么更改默认浏览器
打开手机设置-->应用和服务(或应用管理)-->默认应用,如下图浏览器位置点开选择需要默... -
怎么看显存
把电脑打开,然后再桌面找到我的电脑(或者计算机)这个图标,如图:一、工具:电脑2】找到之后就对着这个...