Golang gRP C значения по умолчанию - PullRequest
1 голос
/ 04 марта 2020

Учитывая следующее определение protobuf:

message MyMessage {
    string Foo = 1;
    int From = 2;
    int To = 3;
}

Тогда у меня есть случай, когда я хочу отправить только строку Foo от клиента, нет проблем. Проблема возникает на сервере, где я хочу знать, имеет ли значение From и To значение (UNIX timestamps). Если это значение явно не установлено клиентом, то Go установит значение 0, что является полностью допустимой отметкой времени Unix. На данный момент я понятия не имею, намеревался ли Клиент дать мне 1970-01-01 00:00:00 или он хотел оставить его пустым.

Я мог бы добавить два bools, которые говорят, действительно ли это или нет From и To были установлены клиентом, но я чувствую, что должно быть более элегантное решение, чем это.

Есть ли способ на самом деле выяснить, намеревался ли клиент отправить нулевые значения, или если это на самом деле установить значение 0? То же самое касается "" для строк и пр.

1 Ответ

2 голосов
/ 04 марта 2020

Вы не можете различить guish между отсутствующими полями и полями, для которых установлено значение по умолчанию в proto3. Это по замыслу. Цитирование xfxyjwf в Выпуск 1606 :

  • Обоснование удаления присутствия поля в proto3:

    • Наличие поля в proto2 вызвал путаницу и усложнил семантику, например, нужно различать guish между полями отсутствия и полями, для которых установлены значения по умолчанию; пользователи обычно проверяют наличие, прежде чем получить доступ к полям, которые не нужны. Мы считаем, что в большинстве случаев информация о присутствии поля не требуется.

    • Удаление присутствия поля значительно упрощает реализацию Proto3 с представлениями открытой структуры, как в таких языках, как Android Java ( go / nano-proto) или Go. Более легкая реализация, в свою очередь, делает ее более доступной для внешних сообществ разработчиков.

  • Если такая информация о присутствии явно необходима, есть несколько обходных путей, например обертки, явное логическое значение has_field. Oneof также можно использовать, если требуется обратная совместимость проводов с дополнительным полем proto2.
...