Senior
Какво е слайс? Какво е под капака на слайса? Как работи функцията append?
sobes.tech AI
Отговор от AI
В Go, слайсът е динамичен масив, който представлява структура с три полета:
- Посочвач към масива (подлежащият масив в паметта)
- Дължина (len) — броят на елементите, достъпни в слайса
- Капацитет (cap) — максималният брой елементи, които подлежащият масив може да съдържа, започвайки от посочвача
Зад сцената, слайсът е малка структура, приблизително така:
type sliceHeader struct {
Data uintptr // посочвач към първия елемент на масива
Len int
Cap int
}
Функцията append добавя елементи към слайса. Ако дължината на слайса е по-малка от капацитета, append просто записва новите елементи в подлежащия масив и увеличава дължината. Ако дължината достигне капацитета, append заделя нов масив с по-голям капацитет (обикновено два пъти по-голям), копира старите елементи, добавя новите и връща нов слайс с актуализиран посочвач.
Пример:
s := []int{1, 2, 3}
s = append(s, 4) // ако cap(s) > len(s), просто добавя 4
// ако cap(s) == len(s), заделя нов масив, копира [1,2,3], добавя 4
По този начин, append може да връща нов слайс, и е важно да присвоявате резултата отново.