Sobes.tech
Назад к вопросам
Junior — Middle
77

В чем различие между передачей целого массива и передачи его слайса в функцию?

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

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

sobes.tech AI

В Go при передаче массива в функцию копируется весь массив, то есть создаётся его полная копия. Это может быть дорого по памяти и времени, особенно для больших массивов. Изменения внутри функции не повлияют на исходный массив.

При передаче слайса передаётся структура слайса (указатель на массив, длина и ёмкость) по значению, но сам указатель указывает на исходный массив. Поэтому изменения элементов слайса внутри функции отражаются на оригинальном массиве, а копируется только небольшая структура слайса, что эффективнее.

Пример:

func modifyArray(a [3]int) {
    a[0] = 10 // изменится только копия
}

func modifySlice(s []int) {
    s[0] = 10 // изменится исходный массив
}

func main() {
    arr := [3]int{1, 2, 3}
    modifyArray(arr)
    fmt.Println(arr) // [1 2 3]

    slice := arr[:]
    modifySlice(slice)
    fmt.Println(arr) // [10 2 3]
}

Таким образом, слайсы более удобны и эффективны для передачи больших наборов данных и позволяют изменять исходные данные внутри функции.