Я использую протокольные буферы, и все работает нормально. за исключением того, что я не понимаю - зачем мне нужны пронумерованные теги в файле proto
:
message SearchRequest {
required string query = 1;
optional int32 page_number = 2;
optional int32 result_per_page = 3;
}
Конечно, я прочитал docs:
Как вы можете видеть, каждое поле в определении сообщения имеет уникальный пронумерованный тег. Эти теги используются для идентификации ваших полей в бинарный формат сообщения и не должен изменяться после вашего сообщения тип используется.
Я не понял, какая разница, если я его изменю. (Я создам новый прото и скомпилирую его - так зачем это волнует?)
В другой статье говорится, что:
Нумерованные поля в прото-определениях устраняют необходимость в версии проверки, которая является одной из явно заявленных мотивов для проектирование и внедрение протокольных буферов. Как разработчик документация утверждает, что протокол был разработан частично, чтобы избежать "уродливых код" для проверки версий протокола:
if (version == 3) {
...
} else if (version > 4) {
if (version == 5) {
...
}
...
}
Вопрос
Это только я, или это совершенно неясно?
позвольте мне спросить об этом по-другому:
Если у меня есть файл proto, подобный вышеприведенному файлу, а затем я меняю его на:
message SearchRequest {
required string query = 3; //reversed order
optional int32 page_number = 2;
optional int32 result_per_page = 1;
}
Какое это дело? Я повторно компилирую и добавляю файл (я делал это несколько раз за последнюю неделю).
что мне не хватает? можете ли вы предоставить человеко-человеческое объяснение для этих пронумерованных тегов?