Maison >développement back-end >Golang >Pourquoi la suppression des éléments de tranche au début réduit-elle la capacité ?

Pourquoi la suppression des éléments de tranche au début réduit-elle la capacité ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-05 10:38:02310parcourir

Why Does Dropping Slice Elements at the Beginning Reduce Capacity?

Go Tour #11 : Comprendre les changements de capacité des tranches

Un tour de Go démontre le comportement des tranches, où une tranche d'entiers est initialisée et modifiée via une série de opérations. Une observation déroutante dans la démonstration est la réduction de la capacité des tranches après la suppression des deux premiers éléments de la dernière ligne.

Cause du changement de capacité

Les tranches sont soutenues par un tableau et la suppression des éléments à le début d'une tranche déplace effectivement le point de départ de la tranche dans le tableau. Cela réduit le nombre d'éléments entre le début de la tranche et la fin du tableau, ce qui entraîne une capacité plus petite.

Non-impact de la suppression d'éléments à la fin

La suppression d'éléments à la fin de la tranche ne n'affecte pas sa capacité car il ne modifie pas la distance entre le début de la tranche et la fin du tableau. La tranche occupe toujours la même plage d'emplacements dans le tableau de support.

Le tableau de support reste inchangé

Il est important de noter que ces opérations modifient la tranche elle-même, et non le tableau de support. Le tableau reste inchangé tout au long du processus.

Explication détaillée avec impression améliorée

En imprimant l'en-tête de tranche, nous pouvons observer les changements plus clairement :

<code class="go">func printSlice(s []int) {
    sh := (*reflect.SliceHeader)(unsafe.Pointer(&s))
    fmt.Printf("header=%+v len=%d cap=%d %v\n", sh, len(s), cap(s), s)
}</code>

La sortie montre comment le pointeur de données se déplace lorsque des éléments sont supprimés depuis le début ou la fin de la tranche :

header=&{Data:272990208 Len:6 Cap:6} len=6 cap=6 [2 3 5 7 11 13]
header=&{Data:272990208 Len:0 Cap:6} len=0 cap=6 []
header=&{Data:272990208 Len:4 Cap:6} len=4 cap=6 [2 3 5 7]
header=&{Data:272990216 Len:2 Cap:4} len=2 cap=4 [5 7]

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