Sobes.tech
Senior

Ha egy szelettel dolgozom, azt függvényparaméterként veszem, valamit csinálok vele, és a függvény után tovább dolgozom vele — mire kell emlékeznem? Milyen változásokat nem fogunk kívülről látni?

sobes.tech MI

Válasz az MI-től

Go nyelvben a szelet (slice) egy olyan struktúra, amely egy mutatót tartalmaz egy tömbre, egy hosszúságot és egy kapacitást. Amikor egy szeletet átadsz egy függvénynek, csak ez a struktúra (mutató, hossz, kapacitás) kerül másolásra, nem maga a tömb.

Fontos tudni:

  • A szelet elemeinek módosítása a függvényen belül (pl. s[0] = 10) kívülről is látható lesz, mivel ugyanarra a tömbre mutat.
  • A szelet struktúrájának módosítása (pl. új szelet hozzárendelése s = append(s, 5)) nem befolyásolja a függvényen kívüli szeletet, mivel csak a struktúra másolódik.

Példa:

func modify(s []int) {
    s[0] = 100       // módosítja a tömb elemet — kívülről látható
    s = append(s, 200) // módosítja a helyi szelet másolatát — kívülről nem látható
}

s := []int{1, 2, 3}
modify(s)
fmt.Println(s) // [100 2 3] — a 200 hozzáadása nem tükröződik

Összefoglalva, a szelet elemeinek módosításai kívülről láthatók, de a hossz vagy kapacitás változtatásai (append, slices) nem, kivéve, ha új szeletet adunk vissza vagy mutatót adunk át a szelethez.