Проверяет знание внутреннего представления среза и его метаданных.
Срез представляет собой трёхполе́ную структуру: указатель на первый элемент базового массива, текущую длину len и ёмкость cap. Сам массив хранится в куче или на стеке в зависимости от escape-анализa. Метаданные среза (reflect.SliceHeader) описывают эту структуру.
Поля среза:
ptr (*ElementType) — начало данных.
len (int) — число видимых элементов.
cap (int) — доступный размер до перевыделения.
Базовый массив:
Отдельный массив в памяти, может быть больше len.
При slice := arr[low:high:cap]:
Можно задать явную capacity.
Реализация в reflect:
type SliceHeader struct {
Data uintptr
Len int
Cap int
}Вывод:
Это даёт динамическое расширение и экономию аллокаций при append.