在protobuf中,如果一个字段的值为默认值(例如数字类型为0、字符串类型为""、枚举类型为第一个枚举值),并且该字段未被设置,那么默认值将不会被序列化成对应的二进制数据,也就是不会被显示。这是因为protobuf默认会优化掉这些默认字段,从而减小序列化后数据的大小。
如果需要显示这些默认值,可以在定义 .proto
文件时,使用 [(gogoproto.nullable) = false]
标记来禁用默认值优化。比如:
message Example {
int32 value = 1 [(gogoproto.nullable) = false];
}
这样定义后,即使 value
为0且未被设置,也会被序列化并显示在二进制数据中。