Sobes.tech
Назад к вопросам
Senior
7

Как организован слайс под капотом в Go?

Компании, где спрашивали
I-teco

Ответ от нейросети

sobes.tech AI

В Go слайс — это структура, которая содержит три основных поля:

  • указатель на массив — адрес первого элемента слайса в базовом массиве;
  • длина (len) — количество элементов, доступных в слайсе;
  • ёмкость (cap) — максимальное количество элементов, которое можно хранить в базовом массиве, начиная с указателя.

Под капотом слайс — это не массив, а «окно» на часть массива. При добавлении элементов с помощью append, если длина превышает ёмкость, создаётся новый массив большего размера, и данные копируются туда.

Пример структуры слайса (упрощённо):

type sliceHeader struct {
    ptr *ElementType
    len int
    cap int
}

Это позволяет эффективно работать с динамическими массивами без копирования данных при каждом добавлении, пока не превышается текущая ёмкость.