Назад к вопросам
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. Они предоставляют удобный способ работы с последовательностями данных переменной длины.