协议缓冲区格式的匿名结构

时间:2017-09-05 04:42:41

标签: json go protocol-buffers

给出这样的Go结构:

type House struct {
    Address string
    Rooms []struct {
        Name string
        Windows int
        Doors int
    }
}

或等效的JSON表示:

{
    "address": ""
    "rooms": [
        {
            "name": ""
            "windows": 0
            "doors": 0
        }
    ]
}

等效的协议缓冲区表示是什么?

这或多或少是我想要做的(虽然不是有效的Proto语法):

message House {
    string address = 1;
    repeated message {
        string name = 3;
        int32 windows = 4;
        int32 doors = 5;
    } rooms = 2;
}

相反,这样做是有效的,但由于原始rooms切片包含匿名对象,因此无法准确表示数据:

message House {
    string address = 1;
    repeated room rooms = 2;
}

message room {
    string name = 1;
    int32 windows = 2;
    int32 doors = 3;
}

更新:我想我误解了消息声明是如何工作的。我提供的第二个例子应该足够,实际上不会干扰JSON解组。

1 个答案:

答案 0 :(得分:0)

为了实现你想要的东西并摆脱匿名结构,我认为你应该在House内声明房间信息,然后将其分配为重复,如下所示:

type House struct {
    name         string                     
    rooms       []*room
}

type room struct {
    name string
    windows int32
    doors int32
}

它将对应于go中的以下结构:

{{1}}