Comprendre les changements de capacité des tranches dans le Go Tour #11
Le Go Tour fournit des démonstrations perspicaces des fonctionnalités du langage, y compris les tranches. Dans la diapositive 11, une tranche d'entiers est manipulée pour démontrer ses propriétés. Cependant, un constat soulève une question : pourquoi la capacité des tranches change-t-elle dans la dernière ligne, alors qu'elle reste inchangée dans les opérations précédentes ?
Comprendre les effets de la manipulation des tranches sur la capacité
La capacité des tranches fait référence au nombre maximum d'éléments que le tableau sous-jacent peut contenir avant qu'une réallocation ne soit nécessaire. L'extrait de code Go Tour effectue les opérations suivantes :
Raisons de la réduction de capacité dans la dernière ligne
Visualisation des modifications d'en-tête
Le code suivant imprime l'en-tête de tranche, qui fournit des informations supplémentaires sur les changements :
<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 que le pointeur de données d'en-tête se déplace de 272990208 à 272990216 lorsque les deux premiers éléments sont supprimés, réduisant ainsi la capacité de la tranche.
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!