Следующее применимо к синтаксису «proto2», а не «proto3»:
Понятие установленного поля или нет - это базовая функция в Protobuf .Если вы установите в поле значение (любое значение), то соответствующий has_xxx
метод должен вернуть значение true, в противном случае у вас будет ошибка в API.
Если вы не установили поле, а затем сериализовали сообщение, значение для этого поля не отправлялось.Принимающая сторона проанализирует сообщение, обнаружит, какие значения включены, и установит соответствующие значения "has_xxx".
Точно, как это реализовано в проводном формате, документировано здесь: http://code.google.com/apis/protocolbuffers/docs/encoding.html.короткая версия заключается в том, что сообщение кодируется как последовательность пар ключ-значение, и в закодированное сообщение включаются только поля, которые явно установлены.
Значения по умолчанию вступают в действие только при попытке прочитать неустановленное поле.