protobuf
# 概述
protobuf 性能和效率大幅度优于JSON、XML等其它的结构化数据格式。
# 示例
syntax = "proto3";
package main;
message Student {
string name = 1;
bool male = 2;
repeated int32 scores = 3;
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- protobuf有两个版本,默认版本是proto2,如果需要proto3,则需要在非空非注释的第一行使用syntax="proto3"标明版本。
- package,即包名声明符是可选的,用来防止不同的消息类型有命名冲突。
- 消息类型使用message关键字定义,Student是类型名,name,male,scores是该类型的3个字段,类型分别为string,bool和[]int32。
- repeated表示字段可重复,即用来表示Go语言中的数组类型。
- 每个字符 = 后面的数字称为标识符,每个字段都需要提供一个唯一的标识符。
- .proto文件可以写注释,单行注释//,多行注释/* */
- 一个.proto文件中可以写多个消息类型,即对应多个结构体(struct)。
- reserved可以在版本升级时使用。
# 枚举
枚举类型适用于提供一组预定义的值,选择其中一个。例如我们将性别定义为枚举类型。
message Student {
string name = 1;
enum Gender {
FEMALE = 0;
MALE = 1;
}
Gender gender = 2;
repeated int32 scores = 3;
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 定义服务
service SearchService {
rpc Search (SearchRequest) returns (SearchResponse);
}
1
2
3
2
3
上次更新: 2023/01/11