【问题标题】:Why protobuf both required/optional field accepts "default" value, I expect only "optional" should为什么 protobuf 必填/可选字段都接受“默认”值,我希望只有“可选”应该
【发布时间】:2017-03-02 11:31:05
【问题描述】:

google protobuf 允许我这样编写 proto 代码:

syntax="proto2";
message hello
{
    optional int32 id=1;
    required string str=2[default="abc"];
    optional int32 op=3 [default=15];
}

它编译,没问题。我不太明白,对于“可选”字段,当没有指定值时,解码流返回默认值,没关系。但是“必填”字段呢,它不能为空,那么它的“默认”如何也是有效的呢?在什么场景下?

【问题讨论】:

    标签: protocol-buffers


    【解决方案1】:

    “默认”值是该字段尚未设置时该字段的 getter 返回的值。当您创建一个新的消息对象时,最初没有设置任何字段——甚至是必填字段。因此,如果您立即调用它,getter 将返回默认值。

    当然,这对于必填字段并不是特别有用,但似乎没有任何理由禁止它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2021-05-08
      • 2014-03-04
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      相关资源
      最近更新 更多