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) // если ёмкость позволяет, добавляет элемент без аллокации
Таким образом, слайсы удобны для работы с динамическими массивами, обеспечивая гибкость и эффективность.