Ответ
Неинициализированный слайс (nil slice) в Go ведёт себя как пустой слайс в большинстве операций:
- Можно использовать
len()иcap()(вернут 0) - Можно добавлять элементы через
append()(автоматически создаст новый массив) - Можно использовать в range (ничего не выполнится)
- Можно сравнивать с nil (
slice == nilвернёт true)
Пример:
var s []int // nil slice
fmt.Println(len(s)) // 0
s = append(s, 1) // работает
for _, v := range s {
fmt.Println(v) // выполнится для добавленных элементов
}
Но нельзя:
- Индексировать (
s[0]вызовет панику) - Использовать в операциях, требующих выделения памяти (без append)