[protobuf 笔记]02-protobuf 语法
定义消息 message
synatx 定义 proto 语法版本。没有指定时将默认为 proto2 版本
package 关键字,是将此消息结构体封装在包里,同时也可以避免出现 message 类型一样的名字时产生冲突,有了包名就可以进行区分。
import 引入其他的 proto 文件
引入时支持 public 和 week 关键字。一般尽量少使用,因其在规范中介绍比较少。
public 关键字:文件中使用 public 引入其他文件时,另外文件引入你的文件时也会引入第三方文件。
week 关键字: 允许引入的文件不存在,只为了 Google 内部使用。
option 关键字 是用于定义 proto 文件时进行标注一些列的 options 。 Options 不会改变整个文件声明的含义,但能够影响特定环境下处理方式。它也可用在 message、enum、service 的定义中。
数据类型
标量类型如果没有被赋值,则不会被序列化,解析时,会赋予默认值
strings:空字符串
bytes:空序列
bools:false
数值类型:0
枚举
当 message 结构中的字段需要一组预定义的值时,就可以使用枚举
枚举类型的第一个选项的标识符必须时 0
当枚举中出现相同值的标识符时,可以通过开启允许别名 allow_alias
数组类型
数组类型,通过在字段前加 repeated 关键字,标记当前字段是一个数组。
Map 类型
语法:map<key_type, value_type> map_field = N;
key_type
类型可以是内置的标量类型(除浮点类型和bytes
)value_type
可以是除 map 以外的任意类型map 字段不支持
repeated
属性不要依赖 map 类型的字段顺序
定义服务 service
在 RPC 中,可以直接使用 protobuf 来定义 rpc 服务接口
官方仓库也提供了一个插件列表,帮助开发基于 Protocol Buffer 的 RPC 服务。
基本规范
文件以 .proto 为后缀,除了结构定义外的语句以分号结尾
结构定义:message 、service 、enum
rpc 方法定义结尾的分号可有可无
message 命名是 驼峰命名方式,字段命名采用小写字母加下划线分隔方式
Enums 类型名采用驼峰命名方式,字段命名采用大写字母加下划线分隔方式
Service 名称与 RPC 方法名统一采用驼峰式命名
更多 proto3 代码风格,可参考:developers.google.com/protocol-bu…
参考资料:
版权声明: 本文为 InfoQ 作者【南吕】的原创文章。
原文链接:【http://xie.infoq.cn/article/b314959719f955cc8a4e78731】。文章转载请联系作者。
评论