Назад к вопросам
Senior
6
Может ли slice быть равен nil? Чем nil slice отличается от пустого slice?
Компании, где спрашивали
Магнит Тех
Ответ от нейросети
sobes.tech AI
В Go срез (slice) может быть равен nil. Nil slice — это срез, который не указывает ни на какой массив и имеет длину и емкость равные нулю. Пустой slice — это срез, который указывает на массив с нулевой длиной, но при этом не равен nil.
Различия:
- Nil slice:
var s []int— значение по умолчанию,s == nilвозвращает true. - Пустой slice:
s := []int{}— срез с длиной 0, ноs != nil.
Пример:
var s1 []int // nil slice
s2 := []int{} // пустой slice
fmt.Println(s1 == nil) // true
fmt.Println(s2 == nil) // false
fmt.Println(len(s1)) // 0
fmt.Println(len(s2)) // 0
В большинстве случаев nil и пустой slice ведут себя одинаково, но при сериализации, например в JSON, nil slice может быть сериализован как null, а пустой slice — как []. Это важно учитывать при работе с API и внешними форматами.