Теория · урок 1 из 3
Устройство среза
Срез в Go — это маленькая структура из трёх полей: указатель на подлежащий массив, длина (len) и ёмкость (cap).
s := make([]int, 3, 8)
fmt.Println(len(s), cap(s)) // 3 8Когда append превышает ёмкость, рантайм выделяет новый массив (пока срез мал — примерно вдвое больше), копирует элементы и возвращает срез поверх нового массива. Поэтому append может как разделять память со старым срезом, так и «отъехать» на собственную — от этого зависят все классические сюрпризы с алиасингом.