Sobes.tech
Middle

Dans quelle mesure la taille du slice augmente-t-elle lors de l'utilisation de la fonction append ?

sobes.tech IA

Réponse de l'IA

La taille du slice peut augmenter de différentes manières en fonction de la capacité actuelle cap(slice):

  1. Si la capacité n'est pas suffisante : La nouvelle capacité sera au moins le double de la capacité actuelle si celle-ci est inférieure à 1024. Si elle est supérieure à 1024, la capacité augmentera de 25 % de la capacité actuelle jusqu'à ce qu'elle soit suffisante. Ensuite, elle peut être ajustée à la hausse.
  2. Si la capacité est suffisante : La taille du slice augmente exactement du nombre d'éléments ajoutés, et la capacité ne change pas.
// Exemple de comportement de append en cas de capacité insuffisante
s := make([]int, 0, 0) // taille 0, capacité 0
s = append(s, 1)       // taille 1, capacité 1. (0 -> 1)
s = append(s, 2)       // taille 2, capacité 2. (1 -> 2)
s = append(s, 3)       // taille 3, capacité 4. (2 -> 4)
s = append(s, 4)       // taille 4, capacité 4
s = append(s, 5)       // taille 5, capacité 8. (4 -> 8)

s2 := make([]int, 0, 1025) // taille 0, capacité 1025
s2 = append(s2, make([]int, 500)...) // taille 500, capacité 1025 (capacité suffisante)
s2 = append(s2, make([]int, 1000)...) // taille 1500, capacité environ 1025 + 1025*0.25 + epsilon

L'algorithme précis d'augmentation de capacité est géré par le runtime et peut changer entre les versions de Go. Cependant, les règles générales (doubler jusqu'à 1024, augmenter d'environ 25 % après) restent en place.