Sobes.tech
Back to questions
Senior
2

В чем разница между массивами и срезами (slices) в Go?

Companies where asked
sber tech

Answer from AI

sobes.tech AI

Массивы в Go имеют фиксированную длину, которая задаётся при объявлении и не может изменяться. Они хранят элементы подряд в памяти и передаются по значению, то есть копируются при передаче в функции.

Срезы (slices) — это динамические структуры, которые описывают часть массива. Они содержат указатель на массив, длину и ёмкость. Срезы позволяют работать с изменяемыми последовательностями элементов и передаются по ссылке, что эффективнее.

Пример:

var arr [3]int = [3]int{1, 2, 3} // массив фиксированной длины
var s []int = arr[:]             // срез, ссылающийся на весь массив
s = append(s, 4)                 // добавление элемента в срез (создаст новый массив, если ёмкость исчерпана)

Основное отличие — массивы фиксированы по размеру и копируются при передаче, срезы динамичны и более гибки в использовании.