Senior
Ako radim sa slice-om, uzmem ga kao parametar funkcije, nešto s njim uradim i nastavim da radim s njim nakon funkcije — na šta treba da obratim pažnju? Koje promene nećemo videti spolja?
sobes.tech АИ
Одговор од АИ
U Go-u, slice je struktura koja sadrži pokazivač na niz, dužinu i kapacitet. Kada prosledite slice funkciji, kopira se samo ova struktura (pokazivač, dužina, kapacitet), a ne sam niz.
Važno je zapamtiti:
- Promene na elementima slice-a unutar funkcije (npr.,
s[0] = 10) biće vidljive spolja, jer ukazuju na isti niz. - Promene same strukture slice-a (npr., dodeljivanje novog slice-a
s = append(s, 5)) neće uticati na slice izvan funkcije, jer se kopira samo struktura.
Primer:
func modify(s []int) {
s[0] = 100 // promeniće element niza — biće vidljivo spolja
s = append(s, 200) // menja lokalnu kopiju slice-a — spolja neće biti vidljivo
}
s := []int{1, 2, 3}
modify(s)
fmt.Println(s) // Ispisaće [100 2 3], dodavanje 200 neće biti reflektovano
Ukratko, promene na elementima slice-a su vidljive spolja, dok promene dužine ili kapaciteta (kroz append, slices) nisu, osim ako ne vratite novi slice ili ne prosledite pokazivač na slice.