Sobes.tech
Junior — Middle

Milyen adatok vannak a slice-on belül, amelyeket átadnak a függvény hívásakor ezzel a slice-szel argumentumként?

sobes.tech MI

Válasz az MI-től

Go-ban a szelet egy olyan szerkezet, amely három mezőt tartalmaz: egy mutatót egy tömbre, egy hosszúságot és egy kapacitást. Amikor egy szeletet egy függvénynek adunk át, csak ezt a szerkezetet másoljuk, nem az egész adat tömböt.

Vagyis, amikor egy függvényt hívunk, a szelet érték szerint kerül átadásra, de csak a metaadatokat (mutató, hosszúság, kapacitás) másoljuk, nem a tömb elemeit. Ez azt jelenti, hogy a függvényen belül a szelet ugyanarra az alap tömbre mutat, és a szelet elemeiben végrehajtott változtatások kívülről is láthatók lesznek.

Példa:

func modify(slice []int) {
    slice[0] = 100 // az első elemet módosítjuk
}

func main() {
    s := []int{1, 2, 3}
    modify(s)
    fmt.Println(s) // [100 2 3] kiírja
}

Ezért, amikor egy szeletet átadunk egy függvénynek, csak a szelet szerkezetének három mezője másolódik, de a tömb adatai megosztottak maradnak.