Структура против карты в protobuf

Я пытаюсь создать поле в protobuf, чтобы клиент мог передать произвольное значение ключа, чтобы сервер мог прочитать это поле. Я знаю, что в protobuf есть карта и структура, но я не вижу между ними разницы. Любые идеи? И клиент, и сервер на питоне.


person CipherText    schedule 09.10.2020    source источник
comment
AFAIK, структура - это в основном карта с определенными ключами.   -  person OneCricketeer    schedule 09.10.2020
comment
@OneCricketeer Я так не думаю. Как в developers.google.com/protocol-buffers/docs/ reference/, мы можем использовать произвольные ключи в структуре   -  person CipherText    schedule 09.10.2020


Ответы (1)


Структура строго определена как map<string, Value>, сопоставленная с Value типы, например. (простое) определение класса Python

карта Protobuf может поддерживать не только строковые ключи , например dict

person OneCricketeer    schedule 09.10.2020
comment
Я понимаю. Но когда я использую map<string, google.protobuf.Any> extras, как-то. extras.update() выдает ошибку Direct assignment of submessage not allowed. Не уверен, что это связано с google.protobuf.Any? Значение, которое я использовал, это питон List - person CipherText; 09.10.2020
comment
Вы можете иметь map<string, ListValue>? - person OneCricketeer; 09.10.2020
comment
Я хочу сделать тип значения произвольным, чтобы другие люди могли передавать другую пару значений ключа. - person CipherText; 09.10.2020
comment
Значение представляет собой динамически типизированное значение, которое может быть нулевым, числом, строкой, логическим значением, значением рекурсивной структуры или списком значений, который исключает несколько типов Any. - person OneCricketeer; 11.10.2020