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。
フィールドプレゼンスとoptionalproto3の詳細については、アプリケーションノート:フィールドプレゼンスのドキュメントをご覧ください。
--experimental_allow_proto3_optionalリリース3.12でこの機能を使用するには、フラグをprotocに渡します。機能の発表は、それが「うまくいけば3.13で一般的に利用可能」になりますと言います。
2020年11月の更新:この機能は、リリース3.14でもまだ実験的(フラグが必要)と見なされています。ある兆候行われて進歩のは。