Welke gegevens binnen de slice worden doorgegeven bij het aanroepen van de functie met deze slice als argument?
sobes.tech AI
Antwoord van AI
In Go is een slice een structuur die drie velden bevat: een pointer naar een array, een lengte en een capaciteit. Wanneer een slice aan een functie wordt doorgegeven, wordt alleen deze structuur gekopieerd, niet de hele gegevensarray.
Dat betekent dat bij het aanroepen van een functie, de slice per waarde wordt doorgegeven, maar alleen de metadata (pointer, lengte, capaciteit) worden gekopieerd, niet de elementen van de array zelf. Dit betekent dat binnen de functie de slice naar dezelfde basisarray wijst, en wijzigingen aan de elementen van de slice binnen de functie zichtbaar zijn buiten de functie.
Voorbeeld:
func modify(slice []int) {
slice[0] = 100 // wijzigt het eerste element
}
func main() {
s := []int{1, 2, 3}
modify(s)
fmt.Println(s) // zal [100 2 3] afdrukken
}
Dus, bij het doorgeven van een slice aan een functie, worden alleen de drie velden van de slice-structuur gekopieerd, terwijl de array-gegevens gedeeld blijven.