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;
}

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
proto3语法可以用来定义Protocol Buffers消息格式,以进行跨平台数据交换和通信。proto3语法支持以下语言类型: 1. 基本类型:proto3语法支持以下基本类型: - 数值类型:包括int32、int64、uint32、uint64、sint32、sint64、fixed32、fixed64、sfixed32、sfixed64、float和double。 - 字符串类型:使用string标记。 - 布尔类型:使用bool标记。 - 字节类型:使用bytes标记。 2. 枚举类型:proto3语法支持枚举类型,使用enum关键字定义。枚举类型可以包含一个或多个枚举值,每个枚举值有一个名称和一个整数值。 3. 消息类型:proto3语法支持嵌套的消息类型,使用message关键字进行定义。消息类型可以包含一个或多个字段,每个字段包含一个名称和一个类型。 4. 重复类型:proto3语法支持重复类型,即可以定义重复的字段。重复类型可以用于存储多个相同类型的值,使用repeated关键字进行定义。 5. 嵌入式类型:proto3语法支持将一个消息类型嵌入到另一个消息类型中,以创建更复杂的数据结构proto3语法并不依赖于特定的编程语言,而是定义了一种通用的消息格式规范。根据这个规范,在特定的编程语言中可以使用相应的编译器将proto3消息格式编译为该编程语言所支持的数据类型和方法,以实现与不同语言的互操作性。常用的编程语言,如C++、Java、Python等,都有对应的proto3编译器和语言类型支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值