proto3语法
命令
protoc -h
protoc -h //查看protobuf提供的命令
decode
- 将二进制消息转换为文本格式
enum
- 同级中的enum中常量不能有冲突
- 枚举常量的值从零开始
- 默认值为枚举常量为0
syntax="proto3";
enum PhoneType
{
MP = 0;//移动
TEL = 1;//固定
}
enum PhoneTypeCopy
{
MP = 0;
}
//test.proto
syntax="proto3";
enum PhoneType
{
MP = 0;
}
//test_enum.proto
syntax="proto3";
import "test.proto";
enum PhoneType
{
MP = 0;//移动
TEL = 1;//固定
}
//enum PhoneTypeCopy
//{
// MP = 0;
//}
- import引用的也不可以常量重复
- 解决方案加package
通讯录2.1加入enum
contacts.proto
write.cc
read.cc
- 效果
Any
- Any可以是任何类型
升级通讯录
-
wirte.cc
-
read.cc
-
效果
oneof
- contacts.proto
- write.cc
- read.cc
- 效果
map
- contacts.proto
- write.cc
- read.cc
- 效果
默认值
更新消息
更新规则
-
新增:不和老的字段冲突就可以
-
修改:禁止修改字段编号
-
删除:不建议直接删除,不使用被删除或注释的字段,使用reserved 2,100 to 200;表示2,100至200字段编号都不能被使用,否则编译的时候会报错
未知字段
-
server.proto
-
client.proto
- 起始生日字段并没有丢失,是被保留了
获取未知字段
- 效果
前后兼容性
- 向前兼容:老模块能够正确识别新模块生成或发出的协议
- 向后兼容:新模块能够正确识别老模块生成或发出的协议
option
syntax="proto3";
message PeopleInfo
{
string name = 1;
}
syntax="proto3";
option optimize_for = LITE_RUNTIME;//改变了编译器的优化等级
message PeopleInfo
{
string name = 1;
}
option的分类
- 可以分为文件级,消息级和字段级