Sobes.tech
Senior

Kas yra slice? Kas yra po slice? Kaip veikia append funkcija?

sobes.tech AI

Atsakymas iš AI

Go kalba, sluoksnis yra dinaminis masyvas, kuris atstovauja struktūrą su trimis laukais:

  • Nuoroda į masyvą (pagrindinis masyvas atmintyje)
  • Ilgis (len) — prieinamų elementų skaičius sluoksnyje
  • Talpa (cap) — maksimalus elementų skaičius, kurį gali talpinti pagrindinis masyvas nuo nuorodos pradžios

Užkulisiuose, sluoksnis yra mažas struktūra, maždaug taip:

type sliceHeader struct {
    Data uintptr // nuoroda į pirmą elementą
    Len  int
    Cap  int
}

append funkcija prideda elementus į sluoksnį. Jei sluoksnio ilgis yra mažesnis nei talpa, append paprastai įrašo naujus elementus į pagrindinį masyvą ir padidina ilgį. Jei ilgis pasiekia talpą, append paskirsto naują masyvą su didesne talpa (dažniausiai dvigubai), kopijuoja senus elementus, prideda naujus ir grąžina naują sluoksnį su atnaujintu nuoroda.

Pavyzdys:

s := []int{1, 2, 3}
s = append(s, 4) // jei cap(s) > len(s), paprastai pridės 4

// jei cap(s) == len(s), paskirsto naują masyvą, kopijuoja [1,2,3], pridės 4

Taip, append gali grąžinti naują sluoksnį, ir svarbu rezultatą vėl priskirti.