Junior
Was ist der Unterschied zwischen Slices und Arrays in Go?
sobes.tech KI
Antwort von 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. Они предоставляют удобный способ работы с последовательностями данных переменной длины.