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