Проверяет знание поведения slice и нюансов сериализации.
Nil slice имеет значение nil, а empty slice - это slice длины 0. При сериализации в JSON nil превращается в null, а empty slice в [].
В Go есть два разных состояния slice:
nil slice
var s []intempty slice
s := []int{}Оба имеют нулевую длину. Но отличаются внутренним состоянием:
nil slice не имеет выделенной памяти
empty slice указывает на пустой массив
Разница особенно важна при JSON сериализации:
var a []int
b := []int{}JSON:
a -> null
b -> []Это может ломать API контракты.
Например:
items: null
// и
items: []имеют разный смысл для клиента.
Обычно в API предпочитают возвращать [], поэтому перед сериализацией slice инициализируют.
Вывод:
Nil slice и empty slice ведут себя одинаково в коде, но по-разному в API.