Sobes.tech
Senior

Mi az a slice és miben különbözik egy tömbtől?

sobes.tech MI

Válasz az MI-től

Go nyelvben egy tömb (array) egy fix méretű struktúra, amely ugyanazon típusú elemeket tartalmaz. A tömb méretét a deklaráció során határozzuk meg, és futás közben nem változtatható.

A szelet (slice) egy dinamikus, méretében változtatható tömbrész. Egy olyan struktúra, amely egy mutatót tartalmaz a tömbre, a hosszára és a kapacitására. A szeletek lehetővé teszik a tömb részhalmazain való munkát, és szükség esetén automatikusan bővülnek.

Fő különbségek:

  • Méret: a tömb fix méretű, a szelet dinamikus.
  • Átadás: a tömböket érték szerint (másolatként) adjuk át, a szeleteket hivatkozásként (mutató a tömbre).
  • Rugalmasság: a szeletet a append függvénnyel lehet bővíteni, a tömb nem.

Példa:

var arr [3]int = [3]int{1, 2, 3} // fix méretű tömb

var s []int = arr[0:2] // szelet, amely egy részre hivatkozik a tömbből

s = append(s, 4) // a szelet bővül, szükség esetén új tömb jön létre