Maison >développement back-end >Golang >Pourquoi la suppression des éléments de tranche au début réduit-elle la capacité ?
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.
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.
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.
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.
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!