proto3语法规则简介
1.类型
1.1基础类型
1.1.1字符串定义
关键字 string
// 定义一个data字符串变量,1是标号,每个结构体的标号不能重复。
eg: string data = 1;
1.1.2 整型
关键字
// 状态
int32 status = 1;
1.1.3 其他
double:双精度浮点数
float:单精度浮点数
int32:32 位有符号整数(int)
int64:64 位有符号整数 (long)
uint32:32 位无符号整数
uint64:64 位无符号整数
sint32:32 位有符号整数(使用变长编码)
sint64:64 位有符号整数(使用变长编码)
fixed32:32 位固定长度整数
fixed64:64 位固定长度整数
sfixed32:32 位固定长度有符号整数
sfixed64:64 位固定长度有符号整数
bool:布尔值
string:字符串
bytes:字节
默认值:
string 默认值是空字符串
bytes 默认值是空字节序列
bool 默认值是false
number 默认值是0
enum 默认值是定义的第一个枚举值,且必须为0
message 默认值依赖具体的语言;
repeated 默认是空,在恰当的语言中,通常是空列表
1.2 复杂类型
1.2.1 枚举
枚举类型名称:使用驼峰命名法,首字母大写。这有助于提高代码的可读性和一致性。
常量值名称:常量值通常使用全大写字母表示,并且多个单词之间使用下划线连接。
// 0值必须存在,且作为第一个枚举常量的值
// 枚举值范围:32位整数范围,不要设置负数
enum PhoneType {
MP = 0; // 移动电话
TEL = 1; // 固定电话
}
1.2.2 map
map<key_type, value_type> myMap = N;
1.2.3 any 相当于object 存储任意对象
google.protobuf.Any addr = 4;
1.2.4 结构体message
// 定义一个返回消息类型,名为 MessResponse
message MessResponse {
// 状态
int32 status = 1;
// 消息
string msg = 2;
// 数据
string data = 3;
}
2.字段规则
字段规则
当定义消息类型时,字段可以使用不同的规则进行修饰,以确定其在消息中的行为。以下是两种常见的字段修饰规则:
2.1singular(单值):默认
这种规则表示消息中的字段最多可以包含一个值。如果未设置该字段,则其值为默认值(例如0、false、空字符串等)。
在proto3语法中,字段默认使用这种规则,因此如果未显式指定规则,则字段被视为单值字段。
例如,如果定义了一个姓名字段为singular规则,则该消息中每个实例只能包含一个姓名值。
repeated(重复值):数组
这种规则允许消息中的字段包含任意数量的值,包括零个。字段的值以数组形式存储,并且重复值的顺序会被保留。
在消息中可以多次出现相同的字段,并且每次出现的值都会被添加到该字段的值数组中。
例如,如果定义了一个电话号码字段为repeated规则,则该消息中的每个实例可以包含任意数量的电话号码。
2.结构体定义
message Phone {
string number = 1;
}
// 定义联系人
message People {
// 字段类型 字段名 = 字段唯一编号;
string name = 1;
int32 age = 2;
}
// 定义联系人
message PeoplePhone {
// 字段类型 字段名 = 字段唯一编号;
string name = 1;
int32 age = 2;
repeated Phone phone = 3;
}