Protocol Buffers 学习(2):字段类型和其他语言字段类型之间的映射

2,092 阅读2分钟

对照表格

.proto Type 介绍 C++ Type Java Type Python Type Go Type Ruby Type C# Type PHP Type
double double double float float64 Float double float
float float float float float32 Float float float
int32 使用可变长度编码,不能编码负值,如果字段可能有负值,推荐使用sint32 int32 int int int32 Fixnum 或者 Bignum (按需) int integer
int64 使用可变长度编码,不能编码负值,如果字段可能有负值,推荐使用sint64 int64 long int/long int64 Bignum long integer/string
uint32 使用可变长度编码 uint32 int int/long uint32 Fixnum 或者 Bignum (按需) uint integer
uint64 使用可变长度编码 uint64 long int/long uint64 Bignum ulong integer/string
sint32 使用可变长度编码,有符号int型,比int32对负数支持更好 int32 int int int32 Fixnum 或者 Bignum (按需) int integer
sint64 使用可变长度编码,有符号int型,比int64对负数支持更好 int64 long int/long int64 Bignum long integer/string
fixed32 始终为四个字节,值大于2^28时,比uint32更有效 uint32 int int uint32 Fixnum 或者 Bignum (按需) uint integer
fixed64 始终为四个字节,值大于2^56时,比uint64更有效 uint64 long int/long uint64 Bignum ulong integer/string
sfixed32 始终为四个字节 int32 int int int32 Fixnum 或者 Bignum (按需) int integer
sfixed64 始终为四个字节 int64 long int/long int64 Bignum long integer/string
bool bool boolean bool bool TrueClass/FalseClass bool boolean
string 字符串必须始终包含UTF-8编码或7位ASCII文本 string String str/unicode string String (UTF-8) string string
bytes 可以包含任意的字节序列 string ByteString str []byte String (ASCII-8BIT) ByteString string

更多有关编码信息,可以查看谷歌文档(protobuf编码) 需翻墙

字段默认值

当消息被解析时,如果编码的消息不包含特定的单个元素(字段),则解析对象中的相应字段将被设置为该字段的默认值。 这些默认值是特定于类型的:

  • 对于字符串,默认值为空字符串
  • 对于字节,默认值为空字节。
  • 对于bools,默认值为false。
  • 对于数值类型,默认值为零。
  • 对于枚举,默认值是第一个定义的枚举值,它必须为0。
  • 对于消息字段,这个要看具体实现的语言