Sobes.tech
Back to questions
Senior
4

Slice в Go — как организован под капотом?

Companies where asked
.wrk

Answer from AI

sobes.tech AI

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

  1. Указатель на массив (pointer) — адрес первого элемента среза в базовом массиве.
  2. Длина (length) — количество элементов, доступных через срез.
  3. Вместимость (capacity) — максимальное количество элементов, которые можно хранить, начиная с указателя, без выделения новой памяти.

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

Пример структуры среза в Go (упрощённо):

// sliceHeader — внутреннее представление среза
type sliceHeader struct {
    ptr *ElementType // указатель на первый элемент
    len int          // длина среза
    cap int          // вместимость среза
}

Таким образом, срезы — это легковесные структуры, которые позволяют работать с динамическими массивами без копирования данных при передаче по значению.