可以为新创建的对象自动填充protobuffer默认值

can protobuffer auto fill default value for newly created object

本文关键字:对象 填充 默认值 protobuffer 新创建 创建      更新时间:2023-10-16

我在使用google protobuf时遇到问题,我想创建一个具有默认属性值的对象:

message Obj {
    required string id = 1[default=123];
}

序列化上述对象时:

string s;
Obj obj;
obj.SerializeToString(&s);

它抱怨:无法序列化,因为它缺少必需的字段id

doc表示,"默认"值用于从字符串解析obj,而不是序列化为字符串。

是否可以创建具有默认值的对象?

否,您不能为内存中的对象设置默认值。

默认值仅在反序列化时应用。如果字段丢失,required会使读取器出错。因此CCD_ 2和CCD_。

如果你想设置内存中的默认值,可以创建一个工厂函数并使用它。

您不能序列化默认值,但可以将其设置为可选字段。这样,当您反序列化流时,您将获得一个缺少字段的对象,并且尝试获取该值将为您提供默认值。