Middle
O koľko sa zväčší veľkosť slice pri použití funkcie append?
sobes.tech AI
Odpoveď od AI
Veľkosť slice sa môže zväčšovať rôznymi spôsobmi v závislosti od aktuálnej kapacity cap(slice):
- Ak kapacita nie je dostatočná: Nová kapacita bude minimálne dvojnásobkom aktuálnej, ak je menšia ako 1024. Ak je väčšia ako 1024, kapacita sa bude zvyšovať približne o 25 % aktuálnej kapacity, kým nebude dostatočná. Potom môže byť upravená smerom nahor.
- Ak je kapacita dostatočná: Veľkosť slice sa presne zväčší o počet pridaných prvkov a kapacita zostane nezmenená.
// Príklad správania append pri nedostatku kapacity
s := make([]int, 0, 0) // veľkosť 0, kapacita 0
s = append(s, 1) // veľkosť 1, kapacita 1. (0 -> 1)
s = append(s, 2) // veľkosť 2, kapacita 2. (1 -> 2)
s = append(s, 3) // veľkosť 3, kapacita 4. (2 -> 4)
s = append(s, 4) // veľkosť 4, kapacita 4
s = append(s, 5) // veľkosť 5, kapacita 8. (4 -> 8)
s2 := make([]int, 0, 1025) // veľkosť 0, kapacita 1025
s2 = append(s2, make([]int, 500)...) // veľkosť 500, kapacita 1025 (dostatočná)
s2 = append(s2, make([]int, 1000)...) // veľkosť 1500, približne 1025 + 1025*0.25 + epsilon
Konkrétny algoritmus pre zväčšovanie kapacity je vo vnútri runtime a môže sa líšiť medzi verziami Go. Avšak, všeobecné pravidlá (zdvojnásobenie do 1024, zvýšenie o približne 25 % po tom) zostávajú platné.