Middle
Koliko se povećava veličina slice-a pri korišćenju funkcije append?
sobes.tech АИ
Одговор од АИ
Veličina slice može da se poveća na različite načine u zavisnosti od trenutne kapaciteta cap(slice):
- Ako kapacitet nije dovoljan: Novi kapacitet će biti najmanje duplo veći od trenutnog, ako je manji od 1024. Ako je veći od 1024, kapacitet će se povećavati za približno 25% od trenutnog dok ne postane dovoljan. Zatim može biti podešen na viši nivo.
- Ako je kapacitet dovoljan: Veličina slice-a se tačno povećava za broj dodatnih elemenata, a kapacitet ostaje nepromenjen.
// Primer ponašanja append kada nema dovoljno kapaciteta
s := make([]int, 0, 0) // veličina 0, kapacitet 0
s = append(s, 1) // veličina 1, kapacitet 1. (0 -> 1)
s = append(s, 2) // veličina 2, kapacitet 2. (1 -> 2)
s = append(s, 3) // veličina 3, kapacitet 4. (2 -> 4)
s = append(s, 4) // veličina 4, kapacitet 4
s = append(s, 5) // veličina 5, kapacitet 8. (4 -> 8)
s2 := make([]int, 0, 1025) // veličina 0, kapacitet 1025
s2 = append(s2, make([]int, 500)...) // veličina 500, kapacitet 1025 (dovoljno)
s2 = append(s2, make([]int, 1000)...) // veličina 1500, približno 1025 + 1025*0.25 + epsilon
Specifičan algoritam za povećanje kapaciteta nalazi se unutar runtime-a i može varirati između verzija Go-a. Međutim, opšta pravila (udvostručavanje do 1024, povećanje za oko 25% nakon toga) ostaju na snazi.