Protocol buffers 协议缓冲区可选整数,与零不同

Protocol buffers 协议缓冲区可选整数,与零不同,protocol-buffers,Protocol Buffers,在Protocol Buffer version 3中,我试图找出获得可选整数值的最佳方法,其中零和缺席应该是不同的情况。我能想到的最好的办法是制作一种类型: message int64Option { oneof option { bool empty = 14; int64 value = 15; } } 这是一个好主意,还是有更好的方法?proto3中有两个主要选项。第一种方法是像您建议的那样使用oneof,但实际上您只需要在oneof中有

在Protocol Buffer version 3中,我试图找出获得可选整数值的最佳方法,其中零和缺席应该是不同的情况。我能想到的最好的办法是制作一种类型:

message int64Option {
    oneof option {
        bool empty = 14;
        int64 value = 15;
    }
}

这是一个好主意,还是有更好的方法?

proto3中有两个主要选项。第一种方法是像您建议的那样使用
oneof
,但实际上您只需要在
oneof
中有一项:

oneof option {
  int64 value = 15;
}
其中一个字段具有存在的概念,因此您仍然可以确定
值是不存在还是为零。另一种选择是使用中的一种包装器类型。这些包装器中的每一个都只接受一个基本类型并将其包装到消息中,这在您的情况下很有帮助,因为子消息字段具有存在性。以下是
Int64
包装器的外观,例如:

// Wrapper message for `int64`.
//
// The JSON representation for `Int64Value` is JSON string.
message Int64Value {
  // The int64 value.
  int64 value = 1;
}

最后,还有一件事要考虑的是,你可以一直使用PROT2。protobuf 3.0及以上版本均支持proto2和proto3样式,我们计划无限期地继续支持proto2。

太棒了,谢谢!出于好奇,除了
map
,还有支持其他参数化类型的计划吗?我认为目前没有支持任何其他参数化类型的计划(尽管我猜您可能会认为现有的重复字段也有点像参数化类型)。