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

  1. 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.
  2. 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.