Junior — Middle
Koje promene će se desiti sa slice-om unutar funkcije ako ga prosledimo po vrednosti, a funkcija se bavi sortiranjem i ne vraća rezultat?
sobes.tech АИ
Одговор од АИ
U Go jeziku, sejsi se prosleđuju funkcijama po vrednosti, ali je važno razumeti da je vrednost sejsa struktura koja sadrži pokazivač na niz, dužinu i kapacitet. Kada se sejs prosledi po vrednosti, kopira se upravo ta struktura, a ne sam niz podataka.
Ako funkcija sortira sejs prosleđen po vrednosti i ne vraća rezultat, promene će biti vidljive i spolja, jer pokazivač unutar sejsa ukazuje na isti niz podataka.
Primer:
func sortSlice(s []int) {
sort.Ints(s) // sortira sejs
}
func main() {
nums := []int{3, 1, 2}
sortSlice(nums)
fmt.Println(nums) // Ispisaće: [1 2 3]
}
Tako, sortiranje unutar funkcije će izmeniti originalni niz, čak i ako je sejs prosleđen po vrednosti, jer se kopira samo struktura sejsa, a ne podaci niza.