Protobuf语法

协议类型

syntax = "proto2"; 这个分号容易掉

注释写法

//注释

数据结构

message StructName{ //这个大括号在这里在VS中会有语法高亮**
	//字段规则 字段类型 字段名 字段标识号
	required string name = 1; //每次分号结尾
	repeated int32 array_value = 2; //定义了一个动态数组,元素类型时int32 
}

字段规则

required

标识该值是必须要设置的,一个格式良好的消息,一定要包含至少一个这种字段

optional

可以不用设置,如果不设置就不会编码进去,解析时没有的话使用默认值

repeated

在一个格式良好的消息中,这种字段可以重复任意多次(包括0次)。重复的值的顺序会被保留。表示该值可以重复,相当于java中的List,C++中的vector

数据类型

double
浮点数
float
单精度浮点数
int32
int类型,使用可变长编码,编码负数不够高效,有负数,推荐使用sint32
sint32
可变长编码 有符号整性 比通常int32高效
uint32
无符号整数 可变长编码
int64 long long
使用可变长编码方式。编码负数时不够高效——如果有负数,可以使用sint64;
sint64 long long
使用可变长编码方式。有符号的整型值。编码时比通常的int64高效;
uint64
无符号整数 使用可变长编码方式;
fixed32
总是4个字节。如果数值总是比总是比2 ^ 28大的话,这个类型会比uint32高效。
fixed64
总是8个字节。如果数值总是比总是比2 ^ 56大的话,这个类型会比uint64高效。
sfixed32
总是4个字节。
sfixed64
总是8个字节。
bool :
bool值
string :
一个字符串必须是UTF - 8编码或者7 - bit ASCII编码的文本。
bytes :
可能包含任意顺序的字节数据。类似java的ByteString以及 c++ string;

定义枚举

直接在proto文件中:

enum EnumName{
    EnumValue = 1;	
}

EnumName类型可以在类型定义时使用

required EnumName type = 1;

Message的嵌套

message M1{
}
message M2{
	required M1 m = 1;
}

package_避免命名冲突

package myPackage;

proto2与proto3区别

  1. 字段规则移除“required",”optional“改为”singular"
  2. 增加Go,Ruby,JavaNano支持
  3. 移除default选项,字段默认值根据类型由系统决定
  4. 枚举类型第一个字段必须为0
  5. 其他,略
发布了7 篇原创文章 · 获赞 2 · 访问量 469

猜你喜欢

转载自blog.csdn.net/qq_41815396/article/details/104122508
今日推荐