ตั้งแต่ 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 มีสัญญาณของความคืบหน้ากำลังทำ