Sobes.tech
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)