Middle
Hoeveel groeit de grootte van de slice bij gebruik van de functie append?
sobes.tech AI
Antwoord van AI
De grootte van een slice kan op verschillende manieren toenemen, afhankelijk van de huidige capaciteit cap(slice):
- Als de capaciteit niet voldoende is: De nieuwe capaciteit zal minimaal het dubbele zijn van de huidige, als deze minder dan 1024 is. Als deze groter is dan 1024, zal de capaciteit met ongeveer 25% toenemen totdat deze voldoende is. Daarna kan deze omhoog worden aangepast.
- Als de capaciteit voldoende is: De grootte van de slice neemt precies toe met het aantal toegevoegde elementen, en de capaciteit blijft ongewijzigd.
// Voorbeeld van gedrag van append bij onvoldoende capaciteit
s := make([]int, 0, 0) // grootte 0, capaciteit 0
s = append(s, 1) // grootte 1, capaciteit 1. (0 -> 1)
s = append(s, 2) // grootte 2, capaciteit 2. (1 -> 2)
s = append(s, 3) // grootte 3, capaciteit 4. (2 -> 4)
s = append(s, 4) // grootte 4, capaciteit 4
s = append(s, 5) // grootte 5, capaciteit 8. (4 -> 8)
s2 := make([]int, 0, 1025) // grootte 0, capaciteit 1025
s2 = append(s2, make([]int, 500)...) // grootte 500, capaciteit 1025 (voldoende)
s2 = append(s2, make([]int, 1000)...) // grootte 1500, capaciteit ongeveer 1025 + 1025*0.25 + epsilon
Het specifieke algoritme voor het vergroten van de capaciteit bevindt zich binnen de runtime en kan tussen versies van Go variëren. De algemene regels (verdubbel tot 1024, verhoog met ongeveer 25% daarna) blijven echter behouden.