Как сгенерировать карту срезов строк из файла 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.