Какое нулевое значение (zero value) у слайса в Go?

Ответ

Нулевое значение (zero value) для типа "слайс" в Go — это nil.

nil-слайс характеризуется следующими свойствами:

  • Указатель на базовый массив равен nil.
  • Длина (len) равна 0.
  • Вместимость (cap) равна 0.
var s []int

fmt.Println(s == nil)  // Выведет: true
fmt.Println(len(s))    // Выведет: 0
fmt.Println(cap(s))    // Выведет: 0

Важное различие: nil-слайс и пустой слайс

Несмотря на схожее поведение, nil-слайс и пустой слайс — это разные сущности.

  • nil-слайс: var s []int
  • Пустой слайс: s := []int{} или s := make([]int, 0)

Пустой слайс — это инициализированный слайс, который указывает на существующую (хоть и пустую) область памяти. nil-слайс не указывает никуда.

var nilSlice []int
emptySlice := make([]int, 0)

fmt.Println(nilSlice == nil)   // true
fmt.Println(emptySlice == nil) // false

Ключевая особенность Go в том, что большинство стандартных операций, таких как len, cap, range и append, корректно работают с nil-слайсами, как если бы они были пустыми. Это делает код проще и избавляет от лишних проверок на nil.