Le dilemme de capacité des tranches de Go : redimensionnement ou copie
Dans Go, les tranches offrent un moyen dynamique et efficace de gérer les tableaux. Leur capacité peut augmenter à mesure que de nouveaux éléments sont ajoutés, garantissant ainsi que la tranche dispose de suffisamment d'espace pour les stocker. Cependant, il n'est pas toujours clair s'il est possible de réduire la capacité d'une tranche lorsque des éléments sont supprimés.
Considérez le code suivant :
package main import ( "math" "fmt" ) func main() { var a []int64 var i int64 upto := int64(math.Pow10(7)) for i = 0; i < upto; i++ { a = append(a, i) } fmt.Println(cap(a)) }
Après avoir exécuté ce code, vous pouvez vous attendre à ce que la capacité de la tranche pour être plus petit après avoir supprimé certains éléments. La capacité reste cependant la même. En effet, l'implémentation de la tranche de Go donne la priorité aux performances plutôt qu'à l'efficacité de la mémoire.
Pour obtenir une réduction de capacité, il est nécessaire de créer une nouvelle tranche avec la capacité souhaitée et de copier les éléments pertinents :
a = append([]int64(nil), a[:newSize]...)
Cette opération réduit effectivement la capacité de la tranche, mais elle implique également la copie d'éléments, ce qui peut s'avérer coûteux pour les tranches volumineuses.
Le fait que cette limitation soit un problème dépend de le cas d’utilisation spécifique. Si la consommation de mémoire constitue un problème critique, il peut s'avérer nécessaire de gérer manuellement la capacité de la tranche à l'aide de la technique décrite ci-dessus. Cependant, pour la plupart des applications, les avantages en termes de commodité et de performances des tranches Go l'emportent sur les inconvénients potentiels liés à la réduction de capacité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!