Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: slice header, pointer, length, capacity, base array

Как устроен слайс под капотом?

Проверяет знание внутреннего представления среза и его метаданных.

Короткий ответ

Срез представляет собой трёхполе́ную структуру: указатель на первый элемент базового массива, текущую длину 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.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    3

Навыки

  • Golang

    Golang

Ключевые слова

#slice header

#pointer

#length

#capacity

#base array

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.