Sobes.tech
Назад к вопросам
Senior
4

Что такое слайс в Go? Чем отличается от массива? Что происходит при передаче слайса в функцию и изменении его элементов?

Компании, где спрашивали
2gis2gis

Ответ от нейросети

sobes.tech AI

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

Основные отличия слайса от массива:

  • Массив имеет фиксированный размер, заданный при объявлении, например: var arr [5]int.
  • Слайс — это структура, которая ссылается на часть массива, например: var s []int.
  • Слайс можно расширять, изменять длину с помощью встроенных функций, массив — нет.

При передаче слайса в функцию передаётся копия структуры слайса (указатель на массив, длина, ёмкость), но не копируются сами элементы массива. Поэтому если внутри функции изменить элементы слайса (например, s[0] = 10), то изменения будут видны снаружи, так как слайс указывает на тот же массив.

Пример:

func modify(s []int) {
    s[0] = 100
}

func main() {
    arr := [3]int{1, 2, 3}
    s := arr[:]
    modify(s)
    fmt.Println(arr) // Выведет [100 2 3]
}