Junior — Middle
Какви промени ще настъпят със слайса вътре във функцията, ако го предадем по стойност и функцията извършва сортиране и не връща резултат?
sobes.tech AI
Отговор от AI
В Go, слайсовете се предават към функции по стойност, но е важно да разберем, че стойността на слайса е структура, която съдържа указател към масив, дължина и капацитет. При предаване на слайс по стойност, се копира точно тази структура, а не самият масив с данните.
Ако функция сортира слайс, предаден по стойност, и не връща резултата, промените ще бъдат видими и отвън, защото указателят вътре в слайса сочи към същия масив с данни.
Пример:
func sortSlice(s []int) {
sort.Ints(s) // сортира слайса
}
func main() {
nums := []int{3, 1, 2}
sortSlice(nums)
fmt.Println(nums) // Ще изведе: [1 2 3]
}
Така, сортирането вътре във функцията ще промени оригиналния масив, дори ако слайсът е предаден по стойност, защото се копира само структурата на слайса, а не данните на масива.