protobuf 基本语法总结

本文详细介绍了protobuf的基本使用,包括syntax、package、import、message和enum等关键字的用法。重点讲解了message定义,字段修饰符如required、optional(proto3中已移除)以及singular和repeated的含义。此外,还涵盖了protobuf的基本数据类型选择和字段标识的重要性。通过实例展示了如何定义消息类型和字段,帮助读者快速掌握protobuf的语法基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

protobuf 是一种跨平台的序列化结构数据的方法,可用于网络数据传输及存储。

本文对 protobuf 的基本使用语法进行整理和总结。

protobuf 中的关键字

①.syntax

用于指定协议版本号,没有指定则默认为 proto2 版本。

②.package

相等于 C++ 中的命名空间,为了防止名称冲突。

③.import

引入其他的 proto 文件,可以使用其他 proto 文件中定义的消息类型。

④.message

用于定义消息类型,相当于 C++ 中的 struct。

⑤.enum

用于定义枚举类型,相当于 C++ 中的 enum。

message 定义

①.概述

message 用于定义一个数据结构类型,是由一系列字段构成。

②.字段定义

每个字段的定义由一定的格式构成:

在这里插入图片描述

其中数据类型、字段名称、字段标识是必须定义的部分,字段默认值部分在 proto3 版本中不再支持。

字段修饰符

①.概述

字段修饰符用于指定字段的规则,非必须定义。

②.required

required 表示该字段是必须的,即发送方必须给该字段赋值,接收方也必须能够识别该字段。在 proto3 版本中不再支持该修饰符。

③.optional

optional 表示该字段是可选的,当解析的消息中不存在该值时会被指定为默认值,默认值也可以设置。在 proto3 版本中不再支持该修饰符。

optional int32 ID = 1 [default = 99]

④.singular

singular 表示该字段数量可以是 0 或者 1 个。该限制符不需定义,默认就是 singular 类型。

⑤.repeated

repeated 表示该字段数量可以是 0 或者 多 个。可以用来表示 C++ 中的 vector 类型。

基本数据类型

①.概述

protobuf 中支持的基本数据类型和 C++ 基本一致。

②.数据类型选择

如果数值是正数,根据值的范围大小使用 uint32 \ uint64 类型,但如果数值总是比较大的话选择 fixed32 \ fixed64;

如果数值可能是负数,根据值的范围大小使用 int32 \ int64 类型;但如果数值总是比较大的话选择 sfixed32 \ sfixed64;

float \ double 是固定使用 4 \ 8个字节编码,为提高效率可以把浮点数转为整形进行传输;

string 和 bytes 都是字符串,但 string 仅支持 UTF-8 或者 7-bit ASCII 编码的文本。

字段标识

①.概述

消息类型中的每个字段都必须有一个唯一的数字标识。

②.指定数字标识

字段标识即在字段定义中等号后面的数字。

message DemoMsg
{
  string name = 1;
  optional int32 id = 2 ;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值