Protobuf数据类型 | 描述 | 打包 | C++语言映射 | GO语言映射 |
---|---|---|---|---|
bool | 布尔类型 | 1字节 | bool | bool |
double | 64位浮点数 | N | double | float64 |
float | 32为浮点数 | N | float | float32 |
int32 | 32位整数 | N | int | int32 |
uin32 | 无符号32位整数 | N | unsignedint | uint32 |
int64 | 64位整数 | N | __int64 | int64 |
uint64 | 64为无符号整 | N | unsigned__int64 | uint64 |
sint32 | 32位整数,处理负数效率更高 | N | int32 | int32 |
sing64 | 64位整数处理负数效率更高 | N | __int64 | int64 |
fixed32 | 32位无符号整数 | 4 | unsignedint32 | uint32 |
fixed64 | 64位无符号整数 | 8 | unsigned__int64 | uint64 |
sfixed32 | 32位整数、能以更高的效率处理负数 | 4 | unsignedint32 | int32 |
sfixed64 | 64为整数 | 8 | unsigned__int64 | int64 |
string | 只能处理ASCII字符 | N | std::string | string |
bytes | 用于处理多字节的语言字符、如中文 | N | std::string | []byte |
enum | 可以包含一个用户自定义的枚举类型uint32 | N(uint32) | enum | 结构体:struct/数据:int32 |
message | 可以包含一个用户自定义的消息类型 | N | objectofclass | struct |
N 表示打包的字节并不是固定。而是根据数据的大小或者长度。
例如int32,如果数值比较小,在0~127时,使用一个字节打包。
关于枚举的打包方式和uint32相同,GO情况下不同。
关于message,类似于C语言中的结构包含另外一个结构作为数据成员一样。
关于 fixed32 和int32的区别。fixed32的打包效率比int32的效率高,但是使用的空间一般比int32多。因此一个属于时间效率高,一个属于空间效率高。根据项目的实际情况,一般选择fixed32,如果遇到对传输数据量要求比较苛刻的环境,可以选择int32。