Protocol Buffer可选整数,与零不同

时间:2016-11-11 00:14:21

标签: protocol-buffers

在协议缓冲区版本3中,我试图找出具有可选整数值的最佳方法,其中零和缺席应该是不同的情况。我能说的最好的是制作一种类型:

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

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

1 个答案:

答案 0 :(得分:2)

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

oneof option {
  int64 value = 15;
}

其中一个字段具有存在概念,因此您仍可以确定value是否不存在或为零。另一种方法是使用google/protobuf/wrappers.proto中的一种包装类型。这些包装器中的每一个都采用原始类型并将其包装在消息中,这有助于您的情况,因为子消息字段存在。以下是Int64包装器的示例:

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

最后,要考虑的另一件事是你可以继续使用proto2。 Protobuf 3.0及更高版本支持proto2和proto3样式,我们计划无限期地继续支持proto2。