Protobuf(二)proto3语法格式
.proto文件有两种语法标准:proto2和proto3,我们以proto3为例,其语法格式如下:
message <message_name> {<filed_rule> <filed_type> <filed_name> = <field_number> 规则 类型 名称 编号
}
- message_name: 同一个pkg内,必须唯一
- filed_rule: 可以没有, 常用的有repeated, oneof
- filed_type: 数据类型, protobuf定义的数据类型, 生产代码的会映射成对应语言的数据类型
- filed_name: 字段名称, 同一个message 内必须唯一
- field_number: 字段的编号, 序列化成二进制数据时的字段编号
2.1.1、字段规则
2.1.2、字段类型
基础类型
参考官方文档(Language Guide (proto3) | Protocol Buffers | Google Developers),我这里只保留了我常用编程语言的字段类型
.proto Type | Notes | C++ Type | Python Type[3] | C# Type |
---|---|---|---|---|
double | double | float | double | |
float | float | float | float | |
int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int |
int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | int/long[4] | long |
uint32 | Uses variable-length encoding. | uint32 | int/long[4] | uint |
uint64 | Uses variable-length encoding. | uint64 | int/long[4] | ulong |
sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int |
sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | int/long[4] | long |
fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 228. | uint32 | int/long[4] | uint |
fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 256. | uint64 | int/long[4] | ulong |
sfixed32 | Always four bytes. | int32 | int | int |
sfixed64 | Always eight bytes. | int64 | int/long[4] | long |
bool | bool | bool | bool | |
string | A string must always contain UTF-8 encoded or 7-bit ASCII text, and cannot be longer than 232. | string | str/unicode[5] | string |
bytes | May contain any arbitrary sequence of bytes no longer than 232. | string |
str (Python 2) bytes (Python 3) |
ByteString |
枚举类型
语法如下:
enum <enum_name> {<element_name> = <element_number>
}
- enum_name: 枚举名称
- element_name: pkg内全局唯一, 很重要
- element_number: 必须从0开始, 0表示类型的默认值, 32-bit integer
如下示例,Corpus就是我们定义的一个枚举类型。
message SearchRequest {string query = 1;int32 page_number = 2;int32 result_per_page = 3;enum Corpus {UNIVERSAL = 0;WEB = 1;IMAGES = 2;LOCAL = 3;NEWS = 4;PRODUCTS = 5;VIDEO = 6;}Corpus corpus = 4;
}
如果需要将不同的枚举常量映射到相同的值。将allow_alias选项设置为true即可。(最好不要这么使用)
message MyMessage1 {enum EnumAllowingAlias {option allow_alias = true;UNKNOWN = 0;STARTED = 1;RUNNING = 1;}
}
message MyMessage2 {enum EnumNotAllowingAlias {UNKNOWN = 0;STARTED = 1;// RUNNING = 1; // Uncommenting this line will cause a compile error inside Google and a warning message outside.}
}
2.1.3、字段编号
2.1.4、综合示例
Protobuf(二)proto3语法格式相关推荐
- Protobuf 学习手册——语法篇
一.Override Protobuf1 是一种语言中立.平台无关.可扩展的序列化数据的格式,可用于通信协议,数据存储等. ProtoBuf 在序列化数据方面,它是灵活的.高效的.相比于 XML 来说 ...
- 通信协议以及protobuf使用、语法指南一
文章目录 1.设计通信协议 2.协议设计范例 范例一 IM即时通讯协议 范例二 云平台节点服务器 3.序列化和反序列化基础 4.xml/json/protobuf对比及使用场景 5.protobuf安 ...
- linux ATT汇编 与 Intel汇编 语法格式对比
由于绝大多数的国内程序员以前只接触过Intel格式的汇编语言,很少或几乎没有接触过AT&T汇编语言,虽然这些汇编代码都是Intel风格的.但在Unix和Linux系统中,更多采用的还是AT&a ...
- Protobuf 的 proto3 与 proto2 的区别
Protobuf 的 proto3 与 proto2 的区别 转载自:https://solicomo.com/network-dev/protobuf-proto3-vs-proto2.html 这 ...
- java表达式语法格式为_2009(选修)JavaWeb模拟试卷(2011-2012)
第 1 页 共 3 页 成都学院(成都大学)考试试卷 课程名称:_ JavaWeb (闭卷) _2011_-_2012_学年 第_2_学期 一. 填空题(每空3分,共30分) 1.在Tomcat 上发 ...
- python异常处理的语法格式_Python异常处理
Python异常处理 一. 异常的概念 程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常. 程序停止执行并且提示错误信息 这个动作,我们 ...
- JavaSE——XML与JSON(语法格式、解析内容)
第6节 XML与JSON 一.XML 1.1 XML简介 XML全称为可扩展标记语言(extensible Markup Language) . 特性: xml具有平台无关性,是一门独立的标记语言: ...
- php基本语法 格式,PHP 基本语法格式
PHP 基本语法格式 标准代码如下: 复制代码 代码如下: ... ?> 短标签模式(此模式需要修改PHP配置,让PHP支持短标签模式): 复制代码 代码如下: ... ?> 注释: 复制 ...
- NETCONF YANG语言文件语法格式
NETCONF简介:https://blog.csdn.net/Rong_Toa/article/details/104297006 Table of Contents 一.Modules与Submo ...
最新文章
- 基本数据类型_JavaScript基本数据类型
- Mybatis多条件直接查询Param注解版
- python drop_duplicates_Pandas drop_duplicates方法不起作用
- Netty 编解码器和 Handler 调用机制
- 考研(一):一段不错的经历之考研总结
- HDU 2063 过山车
- oracle中isnumber函数,Oracle 函数isnumber问题
- unity之EasyAR使用
- rs232 485 ttl区别
- matlab进行预测误差过大,神经网络预测误差太大怎么办,如何看预测结果
- win7休眠开启与关闭
- 创龙科技Zynq-7010/20工业开发板(双核ARM Cortex-A9+A7)-性能及参数资料
- 半路出家的菜鸡程序员,北漂五年,给刚入行朋友的一些忠告,发自肺腑
- 与欢聚十年终成就百度 不吃老本的YY直播还能有“黄金时代吗?
- AcWing 125. 耍杂技的牛 (推公式)
- larvel 5.7命令行cmd常用命令
- android开源app简书,参考APP, 开发, 发布
- 讯飞星火大模型V1.5发布 刘庆峰:我们要追赶OpenAI
- 真空泵的选择计算 (1)
- 一篇文章了解_docker
热门文章
- PCA中whiten参数
- 云知声依托人工智能先发优势,率先入局ChatGPT
- The 15th Chinese Northeast Collegiate Programming Contest 题解(CCPC压力测试?
- wsl运行ubuntu切换默认登录用户
- 科研工具--HistCite
- 京东手机评论数据挖掘之二:情感分析
- [NLU] Improving Multi-turn Dialogue Modelling with Utterance ReWriter
- ICCV2017 UCT:学习统一卷积网络进行实时可视化跟踪---论文笔记
- 2022年吉利集团主题研究报告
- C语言文件详解(超级详细,记得收藏~~~)