ตั้งแต่ protobuf รีลีส 3.12เป็นต้นมา proto3 มีการสนับสนุนการทดลองสำหรับการใช้optionalคีย์เวิร์ด (เช่นเดียวกับในโปรโต 2) เพื่อให้ข้อมูลสถานะฟิลด์สเกลาร์
syntax = "proto3";
message Foo {
int32 bar = 1;
optional int32 baz = 2;
}
A has_baz()/ hasBaz()method ถูกสร้างขึ้นสำหรับoptionalฟิลด์ด้านบนเช่นเดียวกับใน proto2
ภายใต้ฝากระโปรง Protoc จะปฏิบัติต่อoptionalสนามอย่างมีประสิทธิภาพราวกับว่ามีการประกาศโดยใช้oneofกระดาษห่อหุ้มตามที่คำตอบของ CyberSnoopyแนะนำ:
message Foo {
int32 bar = 1;
oneof optional_baz {
int32 baz = 2;
}
}
หากคุณเคยใช้แนวทางดังกล่าวแล้วคุณจะสามารถล้างการประกาศข้อความของคุณ (เปลี่ยนจากoneofเป็นoptional) ได้เมื่อ proto3 optionalสนับสนุนผู้สำเร็จการศึกษาจากสถานะการทดลองเนื่องจากรูปแบบลวดจะเหมือนกัน
คุณสามารถดูรายละเอียดที่สำคัญเกี่ยวกับการมีอยู่ของฟิลด์และoptionalใน proto3 ได้ในบันทึกการใช้งาน:เอกสารการแสดงตนของฟิลด์
ส่ง--experimental_allow_proto3_optionalแฟล็กไปยัง protoc เพื่อใช้ฟังก์ชันนี้ในรีลีส 3.12 ประกาศคุณลักษณะบอกว่ามันจะเป็น“ใช้ได้โดยทั่วไปหวังว่าใน 3.13”
พฤศจิกายน 2020 ปรับปรุง: คุณลักษณะนี้ถือว่ายังคงทดลอง (ธงจำเป็น) ในการเปิดตัว 3.14 มีสัญญาณของความคืบหน้ากำลังทำ