Sobes.tech
Junior — Middle

Ar perduodant kopiją funkcijai be rodyklės, tai paveiks originalų masyvą?

sobes.tech AI

Atsakymas iš AI

Go kalboje, iškarpa (slice) yra struktūra, kuri turi nuorodą į masyvą, ilgį ir talpą. Kai perduodate iškarpą funkcijai be nuorodos, kopijuojama pati iškarpos struktūra, tačiau ne kopijuojamas pagrindinis masyvas.

Tai reiškia, kad pakeitimai iškarpos elementuose funkcijos viduje paveiks originalų masyvą, nes abu iškarpos nurodo į tą patį masyvą. Tačiau, jei funkcijos viduje pakeisite patį iškarpą (pavyzdžiui, priskirdami naują iškarpą arba keisdami jos ilgį), šie pakeitimai nebus matomi už funkcijos ribų.

Pavyzdys:

func modifySlice(s []int) {
    s[0] = 100 // pakeis originalų masyvą
    s = append(s, 200) // pakeis vietinę iškarpą, ne įtakos išoriniam
}

func main() {
    arr := []int{1, 2, 3}
    modifySlice(arr)
    fmt.Println(arr) // Išves [100 2 3]
}

Santrauka: perduodant iškarpą be nuorodos, galima keisti originalaus masyvo elementus, tačiau negalima keisti paties iškarpos (jos ilgį, nuorodą) už funkcijos ribų.