Что происходит со старыми файлами прото, когда вы обновляете определение прото? - PullRequest
1 голос
/ 01 февраля 2020

Предположим, что однажды я сохраняю прото-сообщение в файле как my_file.pb На следующий день я добавляю новое сообщение в сообщение.

Затем я читаю my_file.pb с диска и пытаюсь получить доступ к новому полю. Будет ли это cra sh? это UB? обрабатывается ли он стандартом?

Я попытался прочитать документацию, и все, что я мог получить, было:

Вы можете добавлять новые поля в форматы сообщений, не нарушая обратную совместимость; старые двоичные файлы просто игнорируют новое поле при разборе. Поэтому, если у вас есть протокол связи, в котором в качестве формата данных используется буфер протокола, вы можете расширить свой протокол, не беспокоясь о том, чтобы сломать существующий код.

Это не говорит мне, какое поведение ожидать, если мой код пытается получить доступ к полю, изначально не определенному в сохраненном протоколе.

1 Ответ

2 голосов
/ 01 февраля 2020

Если вы используете proto3: нет проблем, все поля являются необязательными. Это будет просто пусто / ноль.

Если вы используете proto2: это зависит; «необязательный» или «повторный» - хорошо, без проблем - он будет пустым / по умолчанию. «требуется»: бум, ты тост. Так что ... просто не делай этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...