Sobes.tech
Middle

Cu cât crește dimensiunea slice-ului atunci când se folosește funcția append?

sobes.tech AI

Răspuns de la AI

Dimensiunea unui slice poate crește în moduri diferite, în funcție de capacitatea curentă cap(slice):

  1. Dacă capacitatea nu este suficientă: Noua capacitate va fi cel puțin dublul capacității curente, dacă aceasta este mai mică de 1024. Dacă este mai mare de 1024, capacitatea va crește cu aproximativ 25% din capacitatea curentă până când devine suficientă. Apoi poate fi ajustată în sus.
  2. Dacă capacitatea este suficientă: Dimensiunea slice-ului crește exact cu numărul de elemente adăugate, iar capacitatea nu se schimbă.
// Exemplu de comportament al funcției append când nu există capacitate suficientă
s := make([]int, 0, 0) // dimensiune 0, capacitate 0
s = append(s, 1)       // dimensiune 1, capacitate 1. (0 -> 1)
s = append(s, 2)       // dimensiune 2, capacitate 2. (1 -> 2)
s = append(s, 3)       // dimensiune 3, capacitate 4. (2 -> 4)
s = append(s, 4)       // dimensiune 4, capacitate 4
s = append(s, 5)       // dimensiune 5, capacitate 8. (4 -> 8)

s2 := make([]int, 0, 1025) // dimensiune 0, capacitate 1025
s2 = append(s2, make([]int, 500)...) // dimensiune 500, capacitate 1025 (suficientă)
s2 = append(s2, make([]int, 1000)...) // dimensiune 1500, capacitate aproximativ 1025 + 1025*0.25 + epsilon

Algoritmul specific pentru creșterea capacității se află în runtime și poate varia între versiunile Go. Cu toate acestea, regulile generale (dublarea până la 1024, creșterea cu aproximativ 25% după aceea) rămân valabile.