Protobuf协议语法

1:定义协议
message 消息名称
{
字段修饰符 字段类型 字段名称 = 标签数值
}
例:

```
message test{

  required int32 id=1;
    required string name=2;
    optional string email=3;

}
message AddressBook{

 …

}
//注:在一个.proto文件中可以定义多个消息类型。

1.1:字段修饰符:requried repeated optional

限定符(required/optional/repeated)的基本规则

(1) 在每个消息中必须至少留有一个required类型的字段。

(2)每个消息中可以包含0个或多个optional类型的字段。
消息描述中的一个元素可以被标记为“可选的”(optional)。一个格式良好的消息可以包含0个或一个optional的元素。当解析消息时,如果它不包含optional的元素值,那么解析出来的对象中的对应字段就被置为默认值。默认值可以在消息描述文件中指定。例如,要为SearchRequest消息的age字段指定默认值10,在定义消息格式时如下所示:
optional int32 age= 3 [default = 10];
如果没有为optional的元素指定默认值,就会使用与特定类型相关的默认值:对string来说,默认值是空字符串。对bool来说,默认值是false。对数值类型来说,默认值是0。对枚举来说,默认值是枚举类型定义中的第一个值。
(3)repeated表示的字段可以包含0个或多个数据。

(4) 如果打算在原有消息协议中添加新的字段,同时还要保证老版本的程序能够正常读取或写入,那么对于新添加的字段必须是optional或repeated。
1.2:字段类型
这里写图片描述
2:枚举类型
enum 类型名称
{
枚举字段名称 = 数值
}
例:
enum PhoneType{
MOBILE=0;
HOME=1;
WORK=2;
}
3:嵌套消息
message 消息1
{

}

message 消息2
{
required 消息1 msg1 = 1;
}
例:
message SearchResponse {

message Result {

required string url = 1;

optional string title = 2;

repeated string snippets = 3;

}

repeated Result result = 1;

}
4:应用:

message test
{
    required int32 id=1;
    required string name=2;
    optional string email=3;

    enum PhoneType{
    MOBILE=0;
    HOME=1;
    WORK=2;
    }

    message PhoneNumber{
    required string number=1;
    optional PhoneType type=2{default=HOME};
    }

    repeated PhoneNumber phone=4;
}

5:小白表示语法写的不是很好,我放几篇其他博主写的^^。
http://blog.csdn.net/zhaozheng7758/article/details/6749047
http://blog.csdn.net/cchd0001/article/details/50669079

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的资料库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值