如何在协议缓冲区中提供默认值?

Nee*_*h I 14 protocol-buffers

message Person {
  required Empid = 1 [default = 100];
  required string name = 2 [default = "Raju"];
  optional string occupation = 3;
  repeated string snippets = 4;
}
Run Code Online (Sandbox Code Playgroud)

我可以提供上面提到的默认值吗?

Noe*_*Yap 15

对于proto3,不允许自定义默认值。

  • 如果我想要自定义默认值,我该怎么办? (2认同)
  • 有人可以链接到它被删除的理由吗?对于上面的字符串字段“name”,我相信您可以使用(java/grpc——在其他平台上可能类似)“hasName()”方法区分显式设置的空字符串和默认的空字符串。这是建议的解决方法吗? (2认同)

jbl*_*ixr 8

更新:以下答案仅适用于 proto2,proto3 不允许自定义默认值。

是的,您可以按照所写的方式提供默认值。default对于 是可选的required,但是对于optional您必须提及的default值,其他类型的特定值是自动分配的。此外,您忘记提及Empid.

protobuf 语言指南指出

如果没有为optional元素指定默认值,则使用特定于类型的默认值:for strings,默认值为空字符串。对于bools,默认值为false。对于数字类型,默认值为zero。对于enums,默认值是枚举类型定义中列出的第一个值。这意味着在将值添加到枚举值列表的开头时必须小心。