Как сгенерировать карту срезов строк из файла protobuf?

Как описано в документации протоколов-буферов:

Каждое поле карты создает поле в структуре типа map[TKey]TValue где TKey это ключевой тип поля и TValue это тип значения поля...

Я бы хотел установить TValueбыть кусочком веревки. Так что в Go он генерирует:

map[string][]string

Учитывая также это примечание о повторяющихся полях:

Аналогичным образом для определения поля repeated bytes foo = 1; компилятор сгенерирует структуру Go с [][]byte поле с именем Foo

Я пытаюсь сделать следующее:

message CallBackUrl {
    string base_url = 1;
    map<string, repeated string> params = 2;
}

Но это просто выдает ошибку:

pb/authenticator.proto:57:26: Expected ">"

Я мог сделать это:

message StringSlice {
    repeated string slice = 1;
}

message CallBackUrl {
    map<string, StringSlice> params = 1;
}

Выходы:

type StringSlice struct {
    Slice []string
}

type CallBackUrl struct {
     Params               map[string]*StringSlice
}

Однако в реализации Params нужно будет использовать как url.Values для построения строки запроса. Это последнее решение потребовало бы дополнительной итерации и копирования данных в новыйmap[string][]string, чего я бы хотел избежать.

(Как) я могу заставить протокол-буферы генерировать (Go) карту фрагментов строки? Я использую плагин gRPC.

0 ответов

Другие вопросы по тегам