Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Как устроено хранение массивов и срезов в памяти? Что такое capacity?

Этот вопрос проверяет понимание внутренней структуры срезов в Go и их аллокации.

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

Массив — это непрерывный блок памяти фиксированного размера [N]T. Срез ([]T) представлен тройкой: указатель на начало массива, длина (len) и ёмкость (cap) — максимальное число элементов до перевыделения. capacity показывает, сколько элементов можно поместить срезу без выделения нового массива при append.

Длинный ответ

Массив:

  • Стек или куча, размер N * sizeof(T).

Срез (Slice):

  • ptr: указатель на первый элемент

  • len: текущее число элементов

  • cap: число элементов от ptr до конца базового массива

Append и capacity:

  • При append(slice, elem) если len < cap, пишем в базовый массив.

  • Если len == cap, создаётся новый массив удвоенного размера и копируется содержимое.

Пример:

a := make([]int, 0, 5)
fmt.Println(len(a), cap(a)) // 0 5
a = append(a, 1,2,3)
fmt.Println(len(a), cap(a)) // 3 5

Вывод:

Cap позволяет снизить количество аллокаций при сборе динамических данных.

  • Аватар

    Golang Guru

    Maxim Lukyanov

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

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Golang

    Golang

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

#array

#slice

#pointer

#length

#capacity

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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