Que se passe-t-il si nous ajoutons trop d'éléments à une slice à l'intérieur d'une fonction?
sobes.tech IA
Réponse de l'IA
Dans Go, un slice est une structure qui contient un pointeur vers un tableau, une longueur et une capacité. Si vous ajoutez trop d’éléments à un slice, dépassant sa capacité actuelle, Go allouera automatiquement un nouveau tableau de taille supérieure et y copiera les données.
Cela signifie qu’en ajoutant des éléments, le slice peut se redistribuer, ce qui entraîne des coûts supplémentaires en temps et en mémoire. Si vous ajoutez des éléments à un slice dans une fonction sans retourner un nouveau slice, les modifications peuvent ne pas être enregistrées, car le slice est passé par valeur (la structure est copiée, mais pas les données).
Exemple :
func appendElements(s []int) {
for i := 0; i < 1000; i++ {
s = append(s, i) // un nouveau slice est créé lorsque la capacité est dépassée
}
}
// Pour que les modifications soient conservées, il faut retourner le slice :
func appendElementsCorrect(s []int) []int {
for i := 0; i < 1000; i++ {
s = append(s, i)
}
return s
}
Ainsi, lors de l’ajout d’un grand nombre d’éléments, il est important de prendre en compte la redistribution de la mémoire et de travailler correctement avec la valeur retournée du slice.