Junior
Wat is het belangrijkste verschil tussen slices en arrays in Go?
sobes.tech AI
Antwoord van AI
Slices zijn dynamisch wijzigbare weergaven van arrays.
| Kenmerk | Array | Slice |
|---|---|---|
| Grootte | Vast, wordt bepaald bij creatie | Dynamisch, kan veranderen |
| Type | [n]T (waar n de grootte is, T het type) |
[]T (waar T het type is) |
| Doorgeven aan functies | Per waarde (kopie) | Per verwijzing naar de onderliggende array, worden head, len en cap doorgegeven (in feite wordt een nieuwe SliceHeader structuur gemaakt met kopieën van deze velden) |
| Creatie | var a [5]int of b := [3]string{"a", "b", "c"} |
var s []int of t := []int{1, 2, 3} of u := make([]int, 5) |
| Prestaties | Meer voorspelbaar door de vaste grootte, kan voordeliger zijn bij kleine groottes | Kan overhead hebben bij groottewijzigingen (herallocatie van de onderliggende array) |
// Voorbeeld array
var arr [3]int = [3]int{1, 2, 3}
// Voorbeeld van een slice gemaakt uit een array
slice := arr[1:] // slice {2, 3}
// Voorbeeld van het maken van een slice
s := []int{10, 20, 30} // onderliggende array {10, 20, 30}, len = 3, cap = 3
// Wijziging van de slice
s = append(s, 40) // nu s {10, 20, 30, 40}. Als er niet genoeg capaciteit is, wordt een nieuwe onderliggende array gemaakt, len = 4, cap = 6 (meestal verdubbeling van de capaciteit).
// Wijziging van een element in de slice wijzigt de onderliggende array
slice[0] = 99 // arr nu {1, 99, 3}
fmt.Println(arr)