Допустим, у меня есть сообщение
message Something {
int32 foo = 1;
int32 bar = 2;
string baz = 3;
}
и я хочу изменить baz
на repeated string
. Должен ли я на самом деле изменить номер? (Например до 4 и не рекомендуется 3).
Мы с другом обсуждаем это. Он более опытен в протофаффах (я новичок в этом деле), но из моего прочтения документов я на самом деле не понимаю, зачем это нужно.
Хотя в документах не рассматривается непосредственно проблема, с которой я столкнулся, я рассуждаю так:
Выше может сериализовать что-то вроде
0001(32bits)0011(utf-8bits)0010(32bits)
И десериализация в основном читала бы это как
- о, хорошо, это 1, так что читайте следующие 32 бита
- о хорошо, это 3, так что читайте следующие биты как utf-8
- хм, следующий - 2, поэтому читайте следующие 32 как
Итак, согласно документу, когда вы добавляете repeated
:
это поле может повторяться любое количество раз (включая ноль) в правильно сформированном сообщении
Что говорит мне о том, что фактическое число битов, которые мы читаем при обнаружении 3
, не будет отличаться, мы просто можем столкнуться с несколькими тройками. Поэтому он является валидацией при сериализации и десериализации, но фактически не является частью кодировки.
Правильна ли эта логика? Могу ли я продолжать использовать один и тот же номер? Или я что-то упустил?