Middle+
Miből áll egy slice, milyen a belső szerkezete?
sobes.tech MI
Válasz az MI-től
Go-ban a szelet egy olyan struktúra, amely három fő mezőt tartalmaz:
- Tömbre mutató pointer — a belső tömb első elemének címe.
- Hossz (len) — a szeletben elérhető elemek száma.
- Kapacitás (cap) — a maximális elem szám, amit a pointertől kezdve el lehet helyezni anélkül, hogy új memóriát foglalnánk.
Belsőleg a szelet nem egy tömb, hanem csak egy "ablak" egy tömb egy részére. Amikor a szeletet módosítjuk (pl. append segítségével elemeket adunk hozzá), és a hossz meghaladja a kapacitást, akkor új tömb jön létre, és az adatokat oda másoljuk.
Egyszerűsített szelet struktúra példája:
type SliceHeader struct {
Data uintptr // mutató a tömb első elemére
Len int // a szelet hossza
Cap int // a szelet kapacitása
}
Ez lehetővé teszi hatékony munkát dinamikus sorozatokkal anélkül, hogy másolnánk az adatokat a szeletelés során.