在.proto文件中需要保持一定的格式规范要求,这里我们简单的坐下介绍。
一、proto文件基本规范
这里proto文件的基本规范主要有以下几点:
1、所有的文件必须是.proto结尾 2、头部一定要带有proto的版本,例如:syntax = "proto3"; 3、结构体的种类一共有3种,分别是:message、service、enum 4、rpc方法定义结尾的分号可有可无,一般不用加分号 5、Message,Service,Enum的命名一般使用驼峰的形式,可以参考java类名的规范 6、Message中字段的命名一般都是小写的形式,可以参考java字段名的规范。如果是多个单词拼接的话,建议使用下划线,例如:first_name。尽量保证全部小写。 7、rpc的方法名也使用驼峰的形式来进行命名。
参考如下:
二、字段规则
在Message里面会定义字段,字段的格式是:
限定修饰符 | 数据类型 | 字段名称 | = | 字段编码值 | [字段默认值]
限定修饰符主要有3种,分别是:required、optional、repeated,详细介绍如下:
1、Required: 表示是一个必须字段,必须相对于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。发送之前没有设置required字段或者无法识别required字段都会引发编解码异常,导致消息被丢弃 2、Optional:表示是一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或者不设置该字段的值。对于接收方,如果能够识别可选字段就进行相应的处理,如果无法识别,则忽略该字段,消息中的其它字段正常处理。---因为optional字段的特性,很多接口在升级版本中都把后来添加的字段都统一的设置为optional字段,这样老的版本无需升级程序也可以正常的与新的软件进行通信,只不过新的字段无法识别而已,因为并不是每个节点都需要新的功能,因此可以做到按需升级和平滑过渡 3、Repeated:表示该字段可以包含0~N个元素。其特性和optional一样,但是每一次可以包含多个值。可以看作是在传递一个数组的值
字段对应的数据类型如下:
序号 | .proto | java | go |
1 | double | double | float64 |
2 | float | float | float32 |
3 | int32 | int | int32 |
4 | int64 | long | int64 |
5 | uint32 | int[1] | uint32 |
6 | uint64 | long[1] | uint64 |
7 | sint32 | int | int32 |
8 | sint64 | long | int64 |
9 | fixed32 | int[1] | uint32 |
10 | fixed64 | long[1] | uint64 |
11 | sfixed32 | int | int32 |
12 | sfixed64 | long | int64 |
13 | bool | boolean | bool |
14 | string | String | string |
15 | bytes | ByteString | []byte |
这里我主要熟悉的语言是java和go,所以只列举java和go类型的转换列表。关于字段这块的详细示例如下:
message Address { required sint32 id = 1 [default = 1]; required string name = 2 [default = '北京']; optional string pinyin = 3 [default = 'beijing']; required string address = 4; required bool flag = 5 [default = true]; }
以上就是关于protobuf文件定义的一些核心内容,方便大家在后期编写rpc业务的时候使用。
还没有评论,来说两句吧...