Как работают слайсы в Go?

Junior
2.8k просмотров
AFK Offer AI

Слайс — это заголовок из 3 полей: указатель на массив, длина (len), ёмкость (cap). Размер заголовка 24 байта.

s := make([]int, 3, 10)
// len=3, cap=10
// s[0], s[1], s[2] доступны
// s[3] — panic, хотя cap позволяет

При append если len < cap — записывает в существующий массив. Если len == cap — создаёт новый массив побольше и копирует.

Слайс передаётся по значению (копируется заголовок), но данные общие — изменения видны в оригинале. Однако если append вызвал рост — это уже новый массив и оригинал не затронут.

Следующий вопрос

Как устроены горутины и сколько памяти занимают?