proto buffer 备忘录
使用protoc命令对我们定义的message.proto文件进行编译
protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/message.proto
ProtoBuf数据类型
proto文件消息类型 | C++ 类型 | 说明 |
---|
double | double | |
float | float | |
int32 | int32 | 使用可变长编码方式,负数时不够高效,应该使用sint32 |
int64 | int64 | 同上 |
uint32 | uint32 | 使用可变长编码方式 |
uint64 | uint64 | 同上 |
sint32 | int32 | 使用可变长编码方式,有符号的整型值,负数编码时比通常的int32高效 |
sint64 | sint64 | 同上 |
fixed32 | uint32 | 总是4个字节,如果数值总是比2^28大的话,这个类型会比uint32高效 |
fixed64 | uint64 | 总是8个字节,如果数值总是比2^56大的话,这个类型会比uint64高效 |
sfixed32 | int32 | 总是4个字节 |
sfixed64 | int64 | 总是8个字节 |
bool | bool | |
string | string | 一个字符串必须是utf-8编码或者7-bit的ascii编码的文本 |
Code Style
- Message名:用驼峰,第一个字母为大写,如PersonRequest
- 字段名字用小写,名字用下划线之间分割,例如:birth_date
- 联合全部用大写
- service名字用大写,service中的方法名也用大写首字母+驼峰命名
message BS_GetGateAddrAck {
enum ErrorCode {
ERR_OK = 0;
ERR_FAIL = 1;
}
ErrorCode error_code = 1;
string gate_ip_addr = 2;
uint32 port = 3;
}
字段修饰符
protobuf一共有三个字段修饰符:
- required:该值是必须要设置的;
- optional :该字段可以有0个或1个值(不超过1个);
- repeated:该字段可以重复任意多次(包括0次),类似于C++中的list;