Senior
Wanneer een slice binnen een functie opnieuw wordt gedeclareerd bij overschrijding van de capaciteit — wordt deze op de heap of op de stack gedeclareerd?
sobes.tech AI
Antwoord van AI
In Go is een slice een structuur die een pointer naar een array bevat, samen met een lengte en capaciteit. Wanneer je elementen toevoegt en de huidige capaciteit van de slice overschrijdt, wordt er een nieuwe array met een grotere capaciteit toegewezen.
Deze nieuwe array wordt op de heap toegewezen, niet op de stack, omdat de grootte en levensduur ervan niet tijdens compilatie kunnen worden vastgesteld. Daarna wijst de slice binnen de functie naar deze nieuwe array op de heap.
Voorbeeld:
func appendElement(s []int, val int) []int {
s = append(s, val) // als de capaciteit niet voldoende is, wordt een nieuwe array op de heap toegewezen
return s
}
Op deze manier wordt de slice opnieuw gedeclareerd met een nieuwe array die zich op de heap bevindt.