Найти в Дзене

Как устроены Slices (слайсы) или же срезы в Golang👩‍💻?

В этом посте можно узнать о основных характеристиках и методах работы с этой структурой

Срезы можно рассматривать как расширенную реализацию массивов.
Срезы были реализованы в Go, чтобы покрыть некоторые крайне распространенные варианты использования, с которыми разработчики сталкиваются при работе с коллекциями, например, динамическое изменение размера коллекций.⚙️

Устройство слайсов в памятиℹ️
Из официальной документации заметим, что срез имеет следующую структуру:
type slice struct {
array unsafe.Pointer
len int
cap int
}
array- указатель на начало последовательности данных
len - количество элементов которые, содержатся в срезе на данный момент
cap-вместительность или же допустимая длина среза

Инициализация срезов⚡️
Срез, в отличии от массива, не выделяет память во время инициализации. Фактически, срезы инициализируется с нулевым (nil) значением.
var z []int //слайс с cap=0 ,len=0
var v = []int{1,2,3} //слайс с заранее заданными значениями , cap=3 , len=3
p:=[]int{1,2,3,4}//слайс с заранее заданными значениями , cap=4 , len=4
//Отдельно стоит упомянуть метод make, который сразу выделяет нужную часть памяти
k:=make([]int,5,6) // len=5,cap=6 , p=[0,0,0,0,0]

Добавление новых элементов🚨

Чтобы добавить новые элементы к срезу, необходимо использовать функцию append.
nums := []int{8, 0}
nums = append(nums, 8)
Под капотом это будет выглядеть, как присвоение значения, указанного для нового элемента, и после – возвращение нового среза. Длина нового среза будет на единицу больше.
1 минута