为什么 protobuf 两个 required/optional 字段都接受 "default" 值,我希望只有 "optional" 应该
Why protobuf both required/optional field accepts "default" value, I expect only "optional" should
google protobuf 允许我编写这样的原型代码:
syntax="proto2";
message hello
{
optional int32 id=1;
required string str=2[default="abc"];
optional int32 op=3 [default=15];
}
编译通过,没问题。我只是不太明白,对于"optional"字段,当没有指定值时,解码流return我是默认值,没关系。但是"required"字段呢,它不能为空,那么它的"default"怎么也是有效的呢?在什么情况下?
"default" 值是在尚未设置字段时由字段的 getter 编辑的值 return。当您创建一个新的消息对象时,最初会设置 none 个字段——甚至是必填字段。因此,默认值是 getter 将 return 如果您立即调用它。
当然,这对必填字段不是特别有用,但似乎没有任何理由禁止它。
google protobuf 允许我编写这样的原型代码:
syntax="proto2";
message hello
{
optional int32 id=1;
required string str=2[default="abc"];
optional int32 op=3 [default=15];
}
编译通过,没问题。我只是不太明白,对于"optional"字段,当没有指定值时,解码流return我是默认值,没关系。但是"required"字段呢,它不能为空,那么它的"default"怎么也是有效的呢?在什么情况下?
"default" 值是在尚未设置字段时由字段的 getter 编辑的值 return。当您创建一个新的消息对象时,最初会设置 none 个字段——甚至是必填字段。因此,默认值是 getter 将 return 如果您立即调用它。
当然,这对必填字段不是特别有用,但似乎没有任何理由禁止它。