Maison  >  Article  >  développement back-end  >  Pourquoi la suppression d'éléments dès le début d'une Go Slice modifie-t-elle sa capacité ?

Pourquoi la suppression d'éléments dès le début d'une Go Slice modifie-t-elle sa capacité ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 09:56:31812parcourir

Why Does Dropping Elements from the Beginning of a Go Slice Change Its Capacity?

Pourquoi la capacité d'une tranche change-t-elle lors de la suppression des n premiers éléments ?

Dans Go, les tranches sont implémentées sous forme de structures, ressemblant à ce qui suit :

<code class="go">type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}</code>

Si nous modifions la fonction utilisée pour imprimer la tranche pour inclure le pointeur vers le tableau sous-jacent, nous obtenons ce qui suit sortie :

ptr=0x450000 len=6 cap=6 [2 3 5 7 11 13]
ptr=0x450000 len=4 cap=6 [2 3 5 7]
ptr=0x450008 len=2 cap=4 [5 7]

Comme vous pouvez le voir, la suppression des deux derniers éléments ne change pas le pointeur, alors que la suppression des deux premiers éléments le fait. En effet, une tranche est essentiellement une fenêtre sur le tableau sous-jacent. La suppression d'éléments depuis le début force la recréation de la tranche dans un nouvel emplacement avec un pointeur différent, tandis que la suppression d'éléments depuis la fin ajuste simplement la longueur de la tranche existante.

Pour plus d'informations, veuillez vous référer à ce qui suit ressources :

  • [Go Slices : utilisation et composants internes](https://blog.golang.org/slices)
  • [Slice types](https://go.dev/ref/spec#Slice_types)
  • [Expressions de tranche](https://go.dev/ref/spec#Slice_expressions)

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