生成go文件
一、message类型
1.定义方式
message xxx{
}
-
messages类型有:message,enum 和 service等
-
一个.proto文件中可以定义多个messages类型,建议一个文件中不要出现多种类型,会导致依赖性膨胀
2.字段定义
optional string stringVal = 1;
1.字段规则:可以忽略,不用指定,默认为optional
optional:字段可出现 0 次或1次,表示可选,为空可以指定默认值 [default = 10],不然使用语言的默认值
optional int32 result_per_page = 3 [default = 10];
字符串默认为空字符串
数字默认为0
bool默认为false
枚举默认为第一个列出的值,一定要注意枚举的顺序,容易有坑
required:字段只能也必须出现 1 次
repeated:字段可出现任意多次(包括 0),数组或列表要使用这种
2.类型:
int32、int64、sint32、sint64、string、32-bit ....
3.字段名称:
注意命名规范
4.=后面的数字表示字段编号:
0 ~ 536870911(除去 19000 到 19999 之间的数字,预留的)
关于optional的说明:
对于接收方,如果能够识别可选字段就进行相应的处理,如果无法识别,则忽略该字段,
消息中的其它字段正常处理。---因为optional字段的特性,
很多接口在升级版本中都把后来添加的字段都统一的设置为optional字段,
这样老的版本无需升级程序也可以正常的与新的软件进行通信,只不过新的字段无法识别而已,
因为并不是每个节点都需要新的功能,因此可以做到按需升级和平滑过渡
二、enum枚举类型
1定义方式
enum EnumAllowingAlias {
option allow_alias = true;
UNKNOWN = 0;
STARTED = 1;
RUNNING = 1;
}
你可以通过为不同的枚举常量指定相同的值来定义别名。
为此,你需要将 allow_alias 选项设置为true,否则 protocol 编译器将在找到别名时生成错误消息。
enum EnumAllowingAlias {
option allow_alias = true;
UNKNOWN = 0;
STARTED = 1;
RUNNING = 1;
}
enum EnumNotAllowingAlias {
UNKNOWN = 0;
STARTED = 1;
}
2.字段定义
UNKNOWN = 0;
STARTED = 1;
RUNNING = 1;
都是常量,没有类型申明
注意:message中可以嵌套enum类型,里层的字段编号和外层的字段编号不冲突
三、service类型
1.定义方式
2.字段定义
四、使用其他 Message 类型
message后面的名称可以在其他的类型中使用,这个时候类型就是指定的类型了
message SearchResponse {
repeated Result result = 1; // 这里的类型是下面定的Result类型,包含 Result message的所有
}
message Result {
required string url = 1;
optional string title = 2;
repeated string snippets = 3;
}