Middle
Qual é o aumento do tamanho do slice ao usar a função append?
sobes.tech IA
Resposta da IA
O tamanho do slice pode aumentar de diferentes formas dependendo da capacidade atual cap(slice):
- Se a capacidade não for suficiente: A nova capacidade será pelo menos o dobro da capacidade atual, se esta for menor que 1024. Se for maior que 1024, a capacidade aumentará em 25% da capacidade atual até que seja suficiente. Depois, pode ser ajustada para cima.
- Se a capacidade for suficiente: O tamanho do slice aumenta exatamente pelo número de elementos adicionados, e a capacidade não muda.
// Exemplo de comportamento do append quando não há capacidade suficiente
s := make([]int, 0, 0) // tamanho 0, capacidade 0
s = append(s, 1) // tamanho 1, capacidade 1. (0 -> 1)
s = append(s, 2) // tamanho 2, capacidade 2. (1 -> 2)
s = append(s, 3) // tamanho 3, capacidade 4. (2 -> 4)
s = append(s, 4) // tamanho 4, capacidade 4
s = append(s, 5) // tamanho 5, capacidade 8. (4 -> 8)
s2 := make([]int, 0, 1025) // tamanho 0, capacidade 1025
s2 = append(s2, make([]int, 500)...) // tamanho 500, capacidade 1025 (capacidade suficiente)
s2 = append(s2, make([]int, 1000)...) // tamanho 1500, capacidade aproximadamente 1025 + 1025*0.25 + epsilon
O algoritmo específico para crescimento de capacidade está dentro do runtime e pode mudar entre versões do Go. No entanto, as regras gerais (dobrar até 1024, aumentar em cerca de 25% depois) permanecem.