前言
Protocol Buffers(简称:ProtoBuf)是一种开源跨平台的序列化数据结构的协议。其对于存储资料或在网络上进行通信的程序是很有用的。这个方法包含一个接口描述语言,描述一些数据结构,并提供程序工具根据这些描述产生代码,这些代码将用来生成或解析代表这些数据结构的字节流。(维基百科)
下载依赖
MacOS
查看版本
注释
指定Protobuf版本
定义包名
定义消息
定义基本类型
1 2 3 4 5
| message 结构体名 { string 字段名 = 1; int32 字段名 = 2; bool 字段名 = 3; }
|
定义切片
1 2 3
| message 结构体名 { repeated string 字段名 = 1; }
|
定义映射
1 2 3
| message 结构体名 { map <string, string> 字段名 = 1; }
|
定义结构体嵌套
1 2 3 4 5 6
| message 结构体名1 { message 结构体名2 { 数据类型 字段名 = 1; } 结构体名2 数据类型 字段名 = 2; }
|
定义枚举
1 2 3 4 5 6 7
| message 结构体名 { enum Sex { male = 0; female = 1; } Sex 字段名 = 1; }
|
允许多个值相同的枚举
1 2 3 4 5 6 7 8 9
| message 结构体名 { enum Sex { option allow_alias = true; male = 0; female = 1; girl = 1; } Sex 字段名 = 1; }
|
定义OneOf
1 2 3 4 5 6
| message 结构体名 { oneof OneOf名 { string 字段名1 = 1; string 字段名2 = 2; } }
|
设置字段为保留字
通过字段名设置字段为保留字
1 2 3
| message 结构体名 { reserved "字段名"; }
|
保留多个
1 2 3
| message 结构体名 { reserved "字段名1", "字段名2"; }
|
通过唯一标识设置字段为保留字
1 2 3
| message 结构体名 { reserved 1; }
|
引入其他Protobuf
dir/package_name.proto1 2 3 4 5 6 7
| syntax = "proto3";
package package_name;
message MessageName1 { string field_name_1 = 1; }
|
file.proto1 2 3 4 5 6 7
| syntax = "proto3";
import "dir/package_name.proto";
message MessageName2 { package_name.MessageName1 field_name_2 = 1; }
|
完成
参考文献
哔哩哔哩——go圈里最会写js的奇淼