Maison >développement back-end >Golang >Comment puis-je réduire la capacité d'un Go Slice ?

Comment puis-je réduire la capacité d'un Go Slice ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-15 02:57:09616parcourir

How Can I Shrink the Capacity of a Go Slice?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn