Ответ
Нулевое значение (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
.