0️⃣ Omitzero или убираем пустые значения при серилизации в json
Я уверен, что большинство в курсе о том, что пакет json
поддерживает структурный тег omitempty
. На данный момент это единственный прямолинейный способ указать, что поле не следует выводить в json если оно содержит нулевое значение. Однако у этого тега есть два минуса:1.
Он плохо работает со структурами.2.
Он неумеет в переопределение принципа по которому определяется сам факт нулевого значения.
Оба пункта довольно долго портили кровь разработчикам сложных вложенных API и заставляли их пользоваться указателями, там, где можно было обойтись без них. И вот Go Team приняла волевое решение и реализовала новый тег. Встречаем omitzero
. Принцип работы прост до невозможности:1.
Если поле это структура и она пустая, то маршалить ее он не будет.2.
Если у типа поля определен метод IsZero
и он вернул true
то и его маршалить не будут.
КМК именно это можно было привезти еще в версии Go 1.10, т.к. фиче не нужны новые языковые фишки, а необходимость ее была видна еще с Go 1.1. Чтож, лучше поздно чем никогда.
>>Click here to continue<<