Size: a a a

2020 August 17

@

@mr_tron in Go-go!
Vadim K
А если нужно прям адаптироваться под существующее тело запроса, тогда кастомный анмаршаллер
надо адаптировать. но за rfc спасибо
источник

ВС

Владимир Столяров... in Go-go!
По Setted можно отличить, передали явно поле null или не передавали
источник

VK

Vadim K in Go-go!
А вообще, если я не ошибаюсь, на sql.NullString и их подобным уже объявлены кастомные анмаршаллеры, которые это и делают
источник

@

@mr_tron in Go-go!
Vadim K
А вообще, если я не ошибаюсь, на sql.NullString и их подобным уже объявлены кастомные анмаршаллеры, которые это и делают
нет
источник

ВС

Владимир Столяров... in Go-go!
В общем, вся фишка в том, что UnmarshalJSON не вызывается, если во входящем json поля не было
источник

н

немедленно in Go-go!
Владимир Столяров
Я уже кидал тут рецепт) смысл примерно следующий: делаете новый тип из 2 полей: указатель на нужный тип + boolean поле, а в UnmarshalJSON делаете присвоение второму полю значения true, затем json.Unmarshal входа в первое поле
красиво
источник
2020 August 18

ЕО

Евгений Омельченко... in Go-go!
Коля
Кто юзает taskfile.dev?
А чего не обычный мейк?
источник

p

pragus in Go-go!
@mr_tron
А вот такой вопрос: а кто-нибудь делал на го различие передан ли параметр json запросе или передан со значением null?
Например запрос апдейта юзера может содержать не содержать поле address и тогда его трогать не надо или может содержать null и тогда чувак стал бомжом и ему надо удалить адрес.
а чем просто поинтер не годится?
источник

н

немедленно in Go-go!
pragus
а чем просто поинтер не годится?
ну челу нужно было узнать есть в жсоне такое поле или нет
источник

ЕО

Евгений Омельченко... in Go-go!
pragus
а чем просто поинтер не годится?
Поинтер не различает null от отсутсвия поля

https://play.golang.org/p/MEMIxYSUIaY
источник

AP

Alexey Palazhchenko in Go-go!
Через map может быть проще всего
источник

AP

Alexey Palazhchenko in Go-go!
@mr_tron
или так делать пиздец как не хорошо?
Лучше не делать, если есть возможность – будет постоянная борьба с Go и его zero value
источник

ВС

Владимир Столяров... in Go-go!
если в качестве значения вседа один тип - ну наверное проще
иначе привет map[string]interface{}
источник

AP

Alexey Palazhchenko in Go-go!
Можно сделать явное поле remove_address
источник

DP

Daniel Podolsky in Go-go!
Евгений Омельченко
Поинтер не различает null от отсутсвия поля

https://play.golang.org/p/MEMIxYSUIaY
вот эта тонкая разница

поля нет
поле есть, но пустое
поле есть и содержит дефолтное значение
поле есть, и содержит значение

вот это все - для извращенцев
источник

AP

Alexey Palazhchenko in Go-go!
Владимир Столяров
если в качестве значения вседа один тип - ну наверное проще
иначе привет map[string]interface{}
Ну и что, нам же только _, ok проверить
источник

AP

Alexey Palazhchenko in Go-go!
Daniel Podolsky
вот эта тонкая разница

поля нет
поле есть, но пустое
поле есть и содержит дефолтное значение
поле есть, и содержит значение

вот это все - для извращенцев
Это ты ещё ORM не писал!
источник

ЕО

Евгений Омельченко... in Go-go!
Daniel Podolsky
вот эта тонкая разница

поля нет
поле есть, но пустое
поле есть и содержит дефолтное значение
поле есть, и содержит значение

вот это все - для извращенцев
Не-не, есть ещё поле есть, но содержит null. Дефолтных значений так-то несколько :)
источник

ВС

Владимир Столяров... in Go-go!
Daniel Podolsky
вот эта тонкая разница

поля нет
поле есть, но пустое
поле есть и содержит дефолтное значение
поле есть, и содержит значение

вот это все - для извращенцев
... еще для тех, кому приходится поддерживать уже ранее спроектированное таким способом api
источник

DP

Daniel Podolsky in Go-go!
Alexey Palazhchenko
Это ты ещё ORM не писал!
ну, кстати, там я бы сделал максимально дубово, пусть даже и с нарушением привычных для баз конвенций.
источник