Protocol buffers 协议缓冲区可选整数,与零不同
在Protocol Buffer version 3中,我试图找出获得可选整数值的最佳方法,其中零和缺席应该是不同的情况。我能想到的最好的办法是制作一种类型:Protocol buffers 协议缓冲区可选整数,与零不同,protocol-buffers,Protocol Buffers,在Protocol Buffer version 3中,我试图找出获得可选整数值的最佳方法,其中零和缺席应该是不同的情况。我能想到的最好的办法是制作一种类型: message int64Option { oneof option { bool empty = 14; int64 value = 15; } } 这是一个好主意,还是有更好的方法?proto3中有两个主要选项。第一种方法是像您建议的那样使用oneof,但实际上您只需要在oneof中有
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
,还有支持其他参数化类型的计划吗?我认为目前没有支持任何其他参数化类型的计划(尽管我猜您可能会认为现有的重复字段也有点像参数化类型)。