Назад к вопросам
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]
}
Таким образом, слайсы более удобны и эффективны для передачи больших наборов данных и позволяют изменять исходные данные внутри функции.