Protobuf数据类型描述打包C++语言映射GO语言映射
bool布尔类型1字节boolbool
double64位浮点数Ndoublefloat64
float32为浮点数Nfloatfloat32
int3232位整数Nintint32
uin32无符号32位整数Nunsignedintuint32
int6464位整数N__int64int64
uint6464为无符号整Nunsigned__int64uint64
sint3232位整数,处理负数效率更高Nint32int32
sing6464位整数处理负数效率更高N__int64int64
fixed3232位无符号整数4unsignedint32uint32
fixed6464位无符号整数8unsigned__int64uint64
sfixed3232位整数、能以更高的效率处理负数4unsignedint32int32
sfixed6464为整数8unsigned__int64int64
string只能处理ASCII字符Nstd::stringstring
bytes用于处理多字节的语言字符、如中文Nstd::string[]byte
enum可以包含一个用户自定义的枚举类型uint32N(uint32)enum结构体:struct/数据:int32
message可以包含一个用户自定义的消息类型Nobjectofclassstruct

N 表示打包的字节并不是固定。而是根据数据的大小或者长度。

例如int32,如果数值比较小,在0~127时,使用一个字节打包。

关于枚举的打包方式和uint32相同,GO情况下不同。

关于message,类似于C语言中的结构包含另外一个结构作为数据成员一样。

关于 fixed32 和int32的区别。fixed32的打包效率比int32的效率高,但是使用的空间一般比int32多。因此一个属于时间效率高,一个属于空间效率高。根据项目的实际情况,一般选择fixed32,如果遇到对传输数据量要求比较苛刻的环境,可以选择int32。


最后修改:2022-04-20
如果觉得我的文章有意思,欢迎赞赏,我会努力创造更好的文章!