Ответ
Срез (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