protobuf extend使用

博客介绍了Proto文件中message的相关操作。BaseMsg中嵌套Msg,Msg预留了100 - 10000的序号extend。若message中有嵌套message,嵌套的message无set方法,需用mutable获取指针赋值,读取时不管是否为message类型,都可通过括号读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,message定义如下:

package TEST;

message BaseMsg
{
    required uint32 seq = 1;
    required Msg msg= 2;
}

message Msg
{
    enum Type
    {
        Read= 10;
        Write= 11;
    }
    required Type type = 1;

    extensions 100 to 10000
}

BaseMsg中嵌套了另一个message:Msg,Msg中最后一行extensions 100 to 10000,预留了100-10000的序号extend。

在另一个proto文件中:

extend Msg
{
    optional uint32 num = 100;
    optional ReqMsg ReqMsg_body = 101;
    optional RspMsg RspMsg_body = 102;
}


message ReqMsg
{
   ...
}

message RspMsg
{
   ...
}

 

使用:

BaseMsg bmsg;
bmsg.set_seq(1);
Msg *msg = bmsg.mutable_msg();//嵌套另一个message,使用mutable_***得到指向该message的指针
msg->set_type(Msg::Read);
ReqMsg *reqmsg = msg->MutableExtension(TEST::ReqMsg_body);//message的extend也是一个message,使用
//MutableExtension读取,通过reqmsg可以设置ReqMsg的值

msg->SetExtension(TEST::num,2);//entend不是message,直接设置
...

ReqMsg reqmsg2 = msg->GetExtension(TEST::ReqMsg_body);//通过GetExtension读取entend

 

如果message中有另一个message,那么嵌套的message没有set方法,需要用mutable获取指针然后操作赋值。

读取时,不管是不是message类型,都可以通过括号读取。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值