Sobes.tech
Back to questions
Senior
4

Что такое slice? Как он устроен внутри?

Companies where asked
Магнит Тех

Answer from AI

sobes.tech AI

В Go слайс (slice) — это динамический массив, который представляет собой структуру с тремя полями:

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

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

Пример структуры слайса в Go:

// Упрощённое представление
type SliceHeader struct {
    Data uintptr // указатель на массив
    Len  int     // длина слайса
    Cap  int     // ёмкость слайса
}

Использование слайса:

s := []int{1, 2, 3} // слайс с длиной 3 и ёмкостью 3
s = append(s, 4)     // если ёмкость позволяет, добавляет элемент без аллокации

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