Maison > Article > développement back-end > Pourquoi la suppression des premiers éléments d'une tranche dans Go modifie-t-elle sa capacité, mais pas la suppression du dernier ?
Comprendre les changements de capacité des tranches : suppression du premier et du dernier élément
Dans Go, les tranches sont une structure de données qui fournit un élément modifiable et de taille dynamique. vue d'un tableau sous-jacent. Lorsque la capacité d'une tranche change, cela affecte le tableau sous-jacent et la gestion de la mémoire.
Considérez le code Go suivant :
<code class="go">package main import "fmt" func main() { s := []int{2, 3, 5, 7, 11, 13} printSlice(s) // Drop its last two values s = s[:len(s)-2] printSlice(s) // Drop its first two values. s = s[2:] printSlice(s) } func printSlice(s []int) { fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s) }</code>
Pourquoi la capacité de la tranche change-t-elle lorsque les deux premiers éléments sont supprimés, mais pas lorsque les deux derniers sont supprimés ?
Pour répondre à cette question, nous devons comprendre comment les tranches Go sont implémentées. Il s'agit d'une structure avec trois champs :
Lorsque les deux derniers éléments de la tranche sont déposés (s = s[:len(s)-2]), le champ len est décrémenté, mais le pointeur de tableau et le champ cap restent les mêmes. En effet, le tableau sous-jacent n'est pas modifié et la tranche fait toujours référence au même tableau.
Cependant, lorsque les deux premiers éléments de la tranche sont supprimés (s = s[2:]), un nouveau un tableau est créé pour contenir la nouvelle tranche. Le champ len est décrémenté, le pointeur du tableau est mis à jour pour pointer vers le nouveau tableau et le champ cap est également décrémenté pour refléter la taille plus petite du nouveau tableau.
Conclusion
La capacité d'une tranche change lorsque les premiers éléments sont supprimés car un nouveau tableau sous-jacent doit être créé pour accueillir la tranche. Cela n'est pas nécessaire lorsque les derniers éléments sont supprimés car le tableau existant peut toujours être utilisé.
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!