Sobes.tech
Senior

Wat is een slice? Wat zit er onder de motorkap van een slice? Hoe werkt de functie append?

sobes.tech AI

Antwoord van AI

In Go is een slice een dynamische array die een structuur met drie velden voorstelt:

  • Pijl naar de array (onderliggende array in geheugen)
  • Lengte (len) — aantal elementen dat beschikbaar is in de slice
  • Capaciteit (cap) — maximale aantal elementen die de onderliggende array vanaf de pijl kan bevatten

Achter de schermen is een slice een kleine structuur, ongeveer zo:

type sliceHeader struct {
    Data uintptr // pijl naar het eerste element van de array
    Len  int
    Cap  int
}

De functie append voegt elementen toe aan de slice. Als de lengte van de slice kleiner is dan de capaciteit, schrijft append gewoon de nieuwe elementen in de onderliggende array en verhoogt de lengte. Als de lengte de capaciteit bereikt, wijst append een nieuwe array toe met een grotere capaciteit (meestal het dubbele), kopieert de oude elementen, voegt de nieuwe toe en geeft een nieuwe slice terug met de bijgewerkte pijl.

Voorbeeld:

s := []int{1, 2, 3}
s = append(s, 4) // als cap(s) > len(s), voegt gewoon 4 toe

// als cap(s) == len(s), wijst het een nieuwe array toe, kopieert [1,2,3], voegt 4 toe

Op deze manier kan append een nieuwe slice teruggeven, en is het belangrijk om het resultaat opnieuw toe te wijzen.