Пропуск нулевых значений в JSON
Опция omitzero
в Go 1.24+ инструктирует JSON-маршалер пропускать нулевые значения.
Вообще у нас уже был для этого omitempty
, но omitzero
вроде как поудобнее будет. Например, он пропускает нулевые значения time.Time
, чего omitempty
делать не умеет.
Вот omitempty
:
type Person struct {
Name string `json:"name"`
BirthDate time.Time `json:"birth_date,omitempty"`
}
alice := Person{Name: "Alice"}
b, err := json.Marshal(alice)
fmt.Println(string(b))
{"name":"Alice","birth_date":"0001-01-01T00:00:00Z"}
А вот omitzero
:
type Person struct {
Name string `json:"name"`
BirthDate time.Time `json:"birth_date,omitzero"`
}
alice := Person{Name: "Alice"}
b, err := json.Marshal(alice)
fmt.Println(string(b))
{"name":"Alice"}
Если у типа есть метод IsZero() bool
— именно он используется при маршалинге, чтобы определить, нулевое значение или нет.
Если метода нет, используется стандартное понятие нулевого значения (0 для целого, "" для строки, и так далее).
Наверно, стоило бы сразу задизайнить так omitempty
, но кто же знал :)
★ Подписывайтесь на новые заметки.