Sobes.tech
Senior

Mi a különbség a tömb és a szelet között a Go-ban?

sobes.tech MI

Válasz az MI-től

Go nyelvben a tömb (array) egy fix méretű szerkezet, amelynek méretét deklaráláskor határozzák meg, és nem változtatható meg. A tömbök egymás után tárolják az elemeket a memóriában, és függvénybe való átadáskor teljes egészében másolódnak.

A szelet (slice) egy dinamikus, méretében változtatható típus, amely egy tömb egy szekvenciális szakaszára mutató hivatkozást képvisel. Egy slice tartalmaz egy mutatót az első elemre, a hosszát és a kapacitását.

Fő különbségek:

  • A tömb mérete fix, a slice-é dinamikus.
  • Átadáskor a tömb másolódik, míg a slice hivatkozásként kerül átadásra az alap tömbre.
  • A slice-t lehet bővíteni (append), a tömböt nem.

Példa:

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

slice := arr[0:2] // slice, amely az első két elemre mutat

slice = append(slice, 4) // a slice bővül, esetleg új alap tömböt hozva létre

Így a slice-ok hasznosak a dinamikus kollekciókkal való munkához, míg a tömbök fix adathalmazokhoz alkalmasak.