1..proto文件第一行syntax = "proto3";确定使用的proto版本。如果不加这一行,默认使用proto2,注意proto2和proto3语法不同。
2.如果怕message重名,第二行会声明包类型。package foo.bar;如果是在golang里,可以使用go_package
重写自动生成的包。
package exmaple.high_score;
option go_package = "hs";
3.定义一个消息类型:
message SearchRequest {
string query = 1;
int32 page_number = 2;int32 result_per_page = 3;
}
可以看到message的字段都有一个数字与之对应,这里是1,2,3,都是不同且唯一的数字.这些字段值用来在消息二进制格式里区分字段,一旦开始使用就不应该再改动。
字段值1-15,用一个自己来编码,包括字段值和字段类型。
字段16-2047用两个字节。所以应该保留1-15给经常使用的字段。
最小值可以设置为1,最大2-29次幂-1(536,870,911)。
pb预先保留的值FieldDescriptor::kFirstReservedNumber(19000)-FieldDescriptor::kLastReservedNumber(19999)也不能用。
4.指定字段规则
singular : message可以包含0个或者最多1个该字段
repeated:可重复任意数量,包括0个。
在proto3中,repeated标量字段默认使用[packed=true];