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.