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