Junior — Middle
Каква е разликата между предаването на цял масив и предаването на негов слайс към функция?
sobes.tech AI
Отговор от 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]
}
По този начин, слайсовете са по-удобни и ефективни за предаване на големи набори от данни и позволяват да се променят оригиналните данни вътре във функцията.