Senior
Kui funktsiooni sees uuesti deklareeritakse slice ja see ületab mahtuvust, kas ta deklareeritakse: virnas või virnas?
sobes.tech AI
Vastus AI-lt
Go keeles on lõik struktuur, mis sisaldab viidet massiivile, pikkust ja mahtu. Kui lisate elemente ja ületate praeguse lõigu mahu, eraldatakse uus massiiv suurema mahuga.
See uus massiiv eraldatakse heapis, mitte virnas, sest selle suurust ja eluea aega ei saa kompileerimise ajal määrata. Pärast seda viitab funktsiooni sees olev lõik sellele uuele massiivile heapis.
Näide:
func appendElement(s []int, val int) []int {
s = append(s, val) // kui maht ei ole piisav, eraldatakse uus massiiv heapis
return s
}
Seega, kui maht ületatakse, deklareerib lõik end uuesti uue massiiviga, mis asub heapis.