1
當定義一個proto
文件時,如何指定整個消息是否是map<string, uint64>
或者它是否包含map<string, uint64>
的元素。因此,例如,你如何寫一個proto
爲Protobuf消息本身是一個映射與消息有一個元素是一個地圖
{
"abc": 1243,
"def": 2343
}
,其中鍵是任意的,你不知道他們事前,與
{
"foo": {
"abc": 1243,
"def": 2343
}
}
我認爲後者將是:
syntax = "proto3";
message Result {
map<string, uint64> foo = 1;
}
但是,您如何定義第一個呢?
那麼,這關於Go中的模式定義和用法。如果我的結果是'類型響應地圖[string] uint64''proto'文件將如何看起來像?目前,這看起來不起作用,所以我需要一個帶有'map [string] uint64'結構元素的'類型響應結構'。同樣適用於數組BTW。似乎Protobuf消息本身只能是一個結構,對嗎?我不能表示一個平面數組,我只能用一個元素來表示一個數組。 – smares
@smares k ...「struct」,你的意思是'message'?或者你的意思是'google.protobuf.Struct',這是一個非常具體的消息,它包含一個'map'?和*在什麼情況下*是這樣的?這是RPC嗎?序列化?或者是什麼? *通常*,大多數API將期望討論一個'message'(可能通過描述符),這將是您的'Result'類型。請注意,'google.protobuf.Struct'仍然無法表示您的數據,除非API包裝它 - 它確實是'{「abc」:{「number_value」:1243},「def」: {「number_value」:2343}}' - 至少在概念上爲 –
但是*如果*您的特定的庫自動封裝了上述內容,那麼確定:只需使用'google.protobuf.Struct'(根據https://github.com/google /protobuf/blob/master/src/google/protobuf/struct.proto) –