Heeft het doorgeven van een kopie aan een functie zonder pointer invloed op de originele array?
sobes.tech AI
Antwoord van AI
In Go is een slice een structuur die een pointer naar een array, een lengte en een capaciteit bevat. Wanneer je een slice zonder pointer doorgeeft aan een functie, wordt de structuur van de slice zelf gekopieerd, maar niet de onderliggende array.
Dit betekent dat wijzigingen aan de elementen van de slice binnen de functie het originele array zullen beïnvloeden, omdat beide slices naar hetzelfde array wijzen. Als je echter de slice zelf wijzigt (bijvoorbeeld door een nieuwe slice toe te wijzen of de lengte te veranderen), zullen deze wijzigingen geen invloed hebben op de slice buiten de functie.
Voorbeeld:
func modifySlice(s []int) {
s[0] = 100 // zal het originele array wijzigen
s = append(s, 200) // zal de lokale slice wijzigen, niet de externe
}
func main() {
arr := []int{1, 2, 3}
modifySlice(arr)
fmt.Println(arr) // Drukt [100 2 3] af
}
Samenvatting: het doorgeven van een slice zonder pointer staat toe dat de elementen van het originele array worden gewijzigd, maar niet dat de slice zelf (zijn lengte, pointer) buiten de functie wordt gewijzigd.