Что можно делать с неинициализированным слайсом

«Что можно делать с неинициализированным слайсом» — вопрос из категории Golang, который задают на 24% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Неинициализированный слайс (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)