Назад к вопросам
Junior
160
questionbank
В чем разница между слайсами и массивами в Go?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Массивы имеют фиксированную длину, определенную при создании. Слайсы представляют собой динамические представления базовых массивов.
Основные отличия:
| Признак | Массив | Слайс |
|---|---|---|
| Длина | Фиксированная | Динамическая |
| Создание | [N]Тип (N - размер) |
[]Тип или make([]Тип, len, cap) |
| Передача | По значению | По ссылке (на базовый массив) |
| Изменение размера | Невозможно | Возможно (с помощью append) |
Примеры:
// Объявление и инициализация массива
var arr [3]int // массив из 3х int, инициализирован нулями
arr2 := [2]string{"a", "b"} // массив из 2х string
// Объявление и инициализация слайса
var slice []int // nil слайс
slice2 := []string{"x", "y", "z"} // слайс из 3х string
slice3 := make([]int, 5) // слайс из 5ти int, инициализирован нулями
slice4 := make([]int, 2, 5) // слайс из 2х int, инициализирован нулями, с емкостью 5
// Пример поведения слайса
arr := [5]int{1, 2, 3, 4, 5}
slice := arr[1:4] // слайс referencing arr[1], arr[2], arr[3]
slice[0] = 99 // изменяет arr[1]
// Изменение размера слайса
slice = append(slice, 100) // создает новый базовый массив, если текущий не вмещает элемент
Слайсы являются более гибкими и часто используются вместо массивов в Go. Они предоставляют удобный способ работы с последовательностями данных переменной длины.