まくろぐ
更新: / 作成:

Protocol Buffers の oneof 型 は、定義したフィールドのうち、いずれか 1 つのフィールドのみに値が格納されていることを示す型です。 次の SampleMessage メッセージ型は、1 つの oneof 型フィールド status を持っています。

message SampleMessage {
  string content = 1;
  oneof status {
    int32 status_code = 2;
    string status_name = 3;
  }
}

上記の oneof ブロックには status_code フィールドと status_name フィールドが定義されていますが、これらのいずれかのフィールドに値が格納されることを示しています。 実際にどのフィールドに値が格納されているかを調べる方法は、各言語の protobuf ライブラリ実装によって異なります。 下記は C++ の例です。

SampleMessage message;

message.set_status_code(123);
if (message.has_status_code()) {
    // ...
}

oneof のフィールドに値をセットすると、同じ oneof に含まれる他のフィールドの値はクリアされることに注意してください。

oneof フィールドに、repeated ラベルoptional ラベル を設定することはできません。

関連記事

まくろぐ
サイトマップまくへのメッセージ