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