Sobes.tech
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]
}

Така, сортирането вътре във функцията ще промени оригиналния масив, дори ако слайсът е предаден по стойност, защото се копира само структурата на слайса, а не данните на масива.