Sobes.tech
Назад к вопросам
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 и внешними форматами.