版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_30071459/article/details/82113634
首先,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类型,都可以通过括号读取。