mannaro
@mannaro
Умею профессионально гуглить

Как разработать поддержку null/undefined для типов (DB/JSON)?

Добрый день, товарищи!
Уже долгое время бьюсь с вопросом организации null/undefined в golang для связи JSON и DB.
Например, у меня есть тип bool. С клиента оно может придти как true/false/null/undefined.
Если пришло true/false, то надо обновить значение в базе. Если пришел null, то надо в базе его выставить как NULL. Если пришёл undefined, то в базе его вообще трогать не надо.

Решения я пока вижу только такие:
1. Использовать *ptr вместо типа. В связке с тем, что Go почти всегда их сам умеет конвертировать, это просто, удобно и легко. Но тут я теряю одно из состояний. То есть либо я undefined привожу к nil, либо null к nil. Соответственно, этот способ не подходит (но это на мой взгляд самый красивый способ, если его можно как-то доработать, будет максимально круто).
2. Использовать sql.NullInt и т.п. вместо обычных типов. Но тут такая же проблема, как и в п.1. Решилось изобретением своих типов, которые оборачивают все стандартные типы. Но это жутко неудобно. Во-первых, чтобы записать их в структуру приходится городить что-то типа nullable.Int{12}, во-вторых, чтобы получить значение обратно надо делать item.count.Value, например.

Хочется какого-то простого решения. Возможно, использовать указатели и как-то красиво посылать запросы в базу. Нужна помощь сообщества. Кто как делает в своих проектах?

P.S.: для превращения структуры есть своя функция, которая с помощью reflect преобразовывает структуру к 2 массивам: names (имена полей) и values (значения полей в том же порядке). Потом скармливается функции для создания запроса или обновления строк. Её можно менять/выкидывать.
  • Вопрос задан
  • 172 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы