protobufリリース3.12以降、proto3は、optional
キーワードを使用して(proto2と同様に)スカラー場のプレゼンス情報を提供するための実験的なサポートを提供しています。
syntax = "proto3";
message Foo {
int32 bar = 1;
optional int32 baz = 2;
}
A has_baz()
/hasBaz()
方法がために生成されoptional
、それはproto2にあったと同じように、上のフィールド。
内部的には、CyberSnoopyの回答が示唆optional
しているように、protocはフィールドをoneof
ラッパーを使用して宣言されているかのように効果的に処理します。
message Foo {
int32 bar = 1;
oneof optional_baz {
int32 baz = 2;
}
}
すでにそのアプローチを使用している場合は、ワイヤー形式が同じであるため、proto3サポートが実験ステータスを卒業したら、メッセージ宣言をクリーンアップ(からoneof
に切り替えるoptional
)できますoptional
。
フィールドプレゼンスとoptional
proto3の詳細については、アプリケーションノート:フィールドプレゼンスのドキュメントをご覧ください。
--experimental_allow_proto3_optional
リリース3.12でこの機能を使用するには、フラグをprotocに渡します。機能の発表は、それが「うまくいけば3.13で一般的に利用可能」になりますと言います。
2020年11月の更新:この機能は、リリース3.14でもまだ実験的(フラグが必要)と見なされています。ある兆候行われて進歩のは。