内嵌类型

注:内容翻译自官网文档 Language Guide (proto3) 中的 Nested Types 一节

可以在消息类型内部定义和使用消息类型, 如下面的例子所示 - 这里Result消息被定义在SearchResponse消息内部:

  1. message SearchResponse {
  2. message Result {
  3. string url = 1;
  4. string title = 2;
  5. repeated string snippets = 3;
  6. }
  7. repeated Result result = 1;
  8. }

如果想在父消息类型之外重用消息类型, 可以使用 Parent.Type 来引用:

  1. message SomeOtherMessage {
  2. SearchResponse.Result result = 1;
  3. }

只要愿意可以内嵌的更深:

  1. message Outer { // Level 0
  2. message MiddleAA { // Level 1
  3. message Inner { // Level 2
  4. int64 ival = 1;
  5. bool booly = 2;
  6. }
  7. }
  8. message MiddleBB { // Level 1
  9. message Inner { // Level 2
  10. int32 ival = 1;
  11. bool booly = 2;
  12. }
  13. }
  14. }