2017-02-02 5 views

ответ

1

Проволочный формат Protobuf предназначен для обратной и прямой совместимости. Итак, generally it is safe, если только вы не стреляли в ногу с помощью одной конкретной функции v2: custom default values. Значения по умолчанию: constant in v3. В частности, значение enum по умолчанию - это первая запись и it must be zero. Таким образом, ваши пользовательские значения v2 будут потеряны. Поля значения по умолчанию вообще не отображаются на проводе, поэтому получатель не знает, не было ли установлено или установлено значение по умолчанию. Имейте в виду, что в v3 все поля: optional (не более required), поэтому любое поле может быть юридически отсутствует.

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

+0

Чтобы уточнить, даже если вы использовали значения по умолчанию в v2, вы все равно можете читать сообщения в v3 - это просто, что значения по умолчанию теперь равны нулю. Поэтому, если поле не было установлено отправителем, тогда его значение будет равно нулю на принимающей стороне. И нет никакого способа отличить это от поля, которое было явно задано отправителем, потому что (как я понимаю) «аксессоры» были удалены. –

+0

Что делать, если я использую синтаксис proto2 в обоих случаях? только обновить банки, но используя старый синтаксис? – litov

Смежные вопросы