![57a524e024c4923551f8d28c5f77ad7e.png](https://i-blog.csdnimg.cn/blog_migrate/bb30955ed69e63c051c659e67cdf5d2b.jpeg)
- 简介
- 安装
- 语言定义
- 特殊指令
- 定义服务
- JSON 支持
- 选项
- 生成代码
- 基础类型
- 更新 message
- Golang 下使用
- 参考
简介
Protocol Buffers 是 google 出品的一种数据交换格式, 缩写为 protobuf.
主要介绍 proto3 版本和 Golang 下的使用.
安装
protobuf 分为编译器和运行时两部分. 编译器直接使用预编译的二进制文件即可, 可以从 releases 上下载.
protobuf 运行时就是不同语言对应的库, 以 Golang 为例:
go get github.com/golang/protobuf/protoc-gen-go
语言定义
protobuf 现在有两个版本, proto2 和 proto3. 本着学新不学旧的原则, 这里只介绍 proto3.
既然是一种数据交换格式, 必然是要学习它的语法的, 就像学习 JSON 一样, 你总得知道如何定义.
默认的文件是 .proto
.
下面是一个简单的例子, 来自于官方文档.
syntax = "proto3";
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page = 3;
}
首行定义了语法版本, 即使用 proto3 版本. 然后定义了一个名为 SearchRequest 的 message, 以及它包含的字段(键值对). message 的结构非常类似于各种语言中的 struct, dict 或者 map.
每个字段包括三个部分, 类型, 字段名和字段编号. 前两个部分非常易懂, 主要解释一下字段编号. 在同一个 message 中字段编号应该是唯一的, 用于在 message 的二进制格式(message binary format)中标识字段. 因此数字的大小决定了编码的长度, 1-15 的数字只占用一个字节.
注释语法是 //
和 /* ... */
.
特殊指令
使用 reserved
注明已被废弃的字段编号和字段名称.
message Foo {
reserved 2, 15, 9 to 11;
reserved "foo", "bar";
}
使用 repeated
可以指定