Back to questions
Бюро 1440
Middle+
3
Чем отличается slice от массива в Go?
Companies where asked
Answer from AI
sobes.tech AI
В Go массивы и срезы (slice) — это разные типы данных с разной семантикой и поведением.
-
Массив — это фиксированная по размеру последовательность элементов одного типа. Размер массива задаётся при объявлении и не может изменяться. Массивы передаются по значению, то есть копируются при присваивании или передаче в функцию.
-
Slice — это динамический, изменяемый по размеру «вид» на массив. Срез содержит указатель на базовый массив, длину и ёмкость. При изменении размера среза (например, добавлении элементов) может происходить выделение нового массива и копирование данных.
Пример:
var arr [3]int = [3]int{1, 2, 3} // массив фиксированного размера
var s []int = arr[:2] // срез, ссылающийся на часть массива
s = append(s, 4) // добавление элемента, возможно выделение нового массива
Ключевые отличия:
- Массивы имеют фиксированный размер, срезы — динамические.
- Срезы — это структура с указателем на массив, длиной и ёмкостью.
- При передаче массива в функцию копируется весь массив, при передаче среза — копируется структура с указателем, что эффективнее.
Таким образом, срезы удобнее для работы с динамическими последовательностями, а массивы — для фиксированных данных.