Sobes.tech
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:

  1. Tömbre mutató pointer — a belső tömb első elemének címe.
  2. Hossz (len) — a szeletben elérhető elemek száma.
  3. 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.