Maison > développement back-end > Golang > Pourquoi la capacité d'une Go Slice retranchée ne correspond-elle pas à la capacité de la tranche d'origine ?

Pourquoi la capacité d'une Go Slice retranchée ne correspond-elle pas à la capacité de la tranche d'origine ?

DDD
Libérer: 2024-12-27 15:44:10
original
554 Les gens l'ont consulté

Why Doesn't the Capacity of a Re-sliced Go Slice Match the Original Slice's Capacity?

Re-découper des tranches dans Golang : comprendre la dynamique du découpage

Dans le domaine de la programmation Go, le découpage de tableaux et de tranches est un concept fondamental. Cependant, rencontrer des complexités comme celle mise en évidence dans le code fourni peut laisser les débutants perplexes. Démêlons la confusion entourant la capacité d'une tranche re-tranchée.

L'exemple de code montre le processus de création de tranches à partir d'un tableau, puis de re-découpe d'une de ces tranches. Cependant, cela soulève un point de discorde : pourquoi la capacité de la tranche retranchée ne correspond-elle pas à la capacité réelle de la tranche dont elle est dérivée ?

Pour comprendre cela, nous devons nous plonger dans les composants internes de trancher en Golang. Lorsqu'une tranche est créée à partir d'un tableau, elle fournit essentiellement une fenêtre sur ce tableau. Cela ne crée pas de copie distincte des éléments ; il fait simplement référence au tableau sous-jacent. La longueur de la tranche représente le nombre d'éléments qu'elle englobe actuellement, tandis que sa capacité indique le nombre maximum d'éléments qu'elle peut potentiellement contenir.

La capacité de la tranche d'origine (b dans ce cas) est déterminée par la taille du tableau à partir duquel il a été créé. Cependant, lorsqu'une nouvelle tranche est effectuée (comme créer c à partir de b), la longueur de la nouvelle tranche (c) est ajustée en fonction des index fournis, mais la capacité reste la même. En effet, la tranche re-tranchée partage toujours le même tableau sous-jacent que la tranche d'origine.

En d'autres termes, la capacité d'une tranche re-tranchée est toujours la capacité de la tranche d'origine moins l'indice de départ de la tranche retranchée. Dans l'exemple fourni, b a une capacité de 5. Puisque c est re-tranché à partir du 0ème indice, sa capacité est 5 - 0 = 5. Cela explique pourquoi c a une capacité de 5 alors qu'il n'a qu'une longueur de 2.

Pour illustrer davantage cela, modifions légèrement l'exemple de code :

func main() {
    b := make([]int, 0, 5)
    c := b[:2]
    d := c[1:5] // equivalent to d := b[1:5]
    d[0] = 1
    printSlice("c", c)
    printSlice("d", d)
}
Copier après la connexion

Dans ce code modifié, d est une tranche retranchée de b cela commence à l'index 1 et monte jusqu'à l'index 5. Lorsqu'on modifie d en attribuant la valeur 1 à son premier élément, il est intéressant d'observer que c est également affecté. En effet, c et d ne sont que des fenêtres différentes dans le même tableau sous-jacent b.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal