Sobes.tech
Senior

Kas ir slice? Kas ir zem slice? Kā darbojas append funkcija?

sobes.tech AI

Atbilde no AI

Go valodā, šķēle ir dinamiska masīva struktūra ar trim laukiem:

  • Norādītājs uz masīvu (zemējais masīvs atmiņā)
  • Garums (len) — pieejamo elementu skaits šķēlē
  • Kapacitāte (cap) — maksimālais elementu skaits, ko var ietilpināt zemējais masīvs no norādītāja sākuma

Aizkulisēs, šķēle ir maza struktūra, aptuveni šāda:

type sliceHeader struct {
    Data uintptr // norādītājs uz pirmo elementu masīvā
    Len  int
    Cap  int
}

append funkcija pievieno elementus šķēlei. Ja šķēles garums ir mazāks par kapacitāti, append vienkārši ieraksta jaunus elementus zemējā masīvā un palielina garumu. Ja garums sasniedz kapacitāti, append piešķir jaunu masīvu ar lielāku kapacitāti (parasti divreiz lielāku), kopē vecos elementus, pievieno jaunus un atgriež jaunu šķēli ar atjauninātu norādītāju.

Piemērs:

s := []int{1, 2, 3}
s = append(s, 4) // ja cap(s) > len(s), vienkārši pievieno 4

// ja cap(s) == len(s), piešķir jaunu masīvu, kopē [1,2,3], pievieno 4

Tādējādi, append var atgriezt jaunu šķēli, un ir svarīgi rezultātu atkal piešķirt.