Protocol Buffers语法

官方文档:https://developers.google.cn/protocol-buffers


Protocol Buffers定义消息类型

基本语法

首先让我们看一个非常简单的例子。假设你要定义一个分页搜索请求消息格式,其中每个搜索请求都有一个查询字符串、你感兴趣的特定结果页面以及每页的多个结果。这是.proto你用来定义消息类型的文件。

syntax = "proto3";

message SearchRequest{
    string query = 1;
    int32 page_number = 2;
    int32 result_per_page = 3;
}
  • 文件的第一行指定使用的是proto3语法:如果不这样做,Protocol Buffers编译器将假定你使用的是proto2这必须是文件的第一个非空、非注释行。

  • SearchRequest消息定义指定了三个字段(名称/值对),每一个字段用于你希望包含在此类消息中的每条数据。每个字段都有一个名称和一个类型。

指定字段类型

在一开始的例子中,所有字段都是标量类型:两个整数(page_numberresult_per_page)和一个字符串(query)。但是你也可以为字段指定复合类型,包括枚举和其他消息类型。

分配字段编号

消息定义中的每个字段都有一个唯一的编号(如一开始例子中的1、2、3)。这些字段编号用于在消息二进制格式中标识您的字段,并且在使用您的消息类型后不应更改。

请注意:

  • 1 到 15 范围内的字段编号需要一个字节进行编码,包括字段编号和字段类型(您可以在Protocol Buffer Encoding中找到更多相关信息)。
  • 16 到 2047 范围内的字段编号占用两个字节
  • 因此,您应该为非常频繁出现的消息元素保留数字 1 到 15。
  • 请记住为将来可能添加的频繁出现的元素留出一些空间。

您可以指定的最小字段编号是 1,最大的是 2^29 - 1,即 536,870,911。您也不能使用数字 19000 到 19999 ( FieldDescriptor::kFirstReservedNumberFieldDescriptor::kLastReservedNumber),因为它们是为 Protocol Buffers 实现保留的——如果您在.proto. 同样,您不能使用任何以前保留的字段编号。

指定字段规则

消息字段可以是以下之一:

  • 单数:格式良好的消息可以有零个或一个此字段(但不能超过一个)。这是 proto3 语法的默认字段规则。
  • repeated:该字段可以在格式良好的消息中重复任意次数(包括零次)。重复值的顺序将被保留。

在 proto3 中,repeated标量数值类型的字段packed默认使用编码。

您可以在Protocol Buffer Encoding中找到有关packed编码的更多信息。

添加更多消息类型

可以在单个.proto文件中定义多种消息类型。如果您要定义多个相关消息,这很有用——例如,如果您想定义与您的SearchResponse消息类型相对应的回复消息格式,您可以将其添加到相同的.proto:

message SearchReques
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值