2016-11-11 10 views
1

プロトコルバッファバージョン3では、オプションの整数値を持つ最良の方法を理解しようとしています。私が考えることができる最高のタイプは、タイプを作ることです:プロトコルバッファ任意の整数、ゼロと区別

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

これは良い考えですか、それとも良い方法がありますか?

答えて

2

proto3には2つの主なオプションがあります。最初は、あなたが提案のようoneofを使用することですが、実際にあなただけのoneofに1つのアイテムを持っている必要があります:あなたはまだvalueが存在しないか、またはゼロであるかどうかを判断することができるように

oneof option { 
    int64 value = 15; 
} 

oneofのフィールドは存在の概念を持っています。もう1つの方法は、google/protobuf/wrappers.protoのラッパー・タイプの1つを使用する方法です。これらのラッパーはそれぞれ、プリミティブ型を取り、それをメッセージにラップします。これは、サブメッセージフィールドが存在するため、状況に役立ちます。ここでInt64ラッパーは例えば次のようになります。

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

は最後に、考慮すべきもうひとつは、あなたが常にproto2を使用し続けることができるということです。 proto2とproto3の両方のスタイルは、protobufバージョン3.0以上でサポートされており、私たちはproto2を無限にサポートし続ける予定です。

+0

賢い、ありがとう!好奇心のために、 'map'以外の他のパラメータ化された型をサポートする計画はありますか? – acjay

+0

私は現在、他のパラメータ化された型をサポートする計画はないと思います(ただし、既存の繰り返しフィールドはパラメータ化された型のようなものであると主張できます)。 –

関連する問題