Что такое slice

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

Ответ

Срез (slice) — это динамическая структура данных в Go, представляющая собой сегмент массива. В отличие от массива, срез имеет переменную длину.

Структура среза:

type slice struct {
    array unsafe.Pointer // указатель на массив
    len   int            // текущая длина
    cap   int            // ёмкость (максимальная длина без переаллокации)
}

Пример:

arr := [5]int{1, 2, 3, 4, 5}
s := arr[1:4] // срез включает элементы 2, 3, 4 (len=3, cap=4)

Особенности:

  • Срезы передаются по ссылке (изменения внутри функции влияют на оригинал).
  • При добавлении элементов (append) может произойти переаллокация, если len > cap.
  • Пустой срез (var s []int) равен nil, но можно создать пустой срез с помощью make([]int, 0).

Создание:

s1 := make([]int, 3, 5) // len=3, cap=5
s2 := []int{1, 2, 3}    // len=3, cap=3