Mystère de la capacité changeante des tranches
A Tour of Go fournit un extrait intrigant qui démontre la manipulation des tranches. Même si vous coupez la tranche, la laissez avec une longueur nulle, puis prolongez sa longueur, le casse-tête réside dans la raison pour laquelle la capacité passe de 6 à 4 dans la dernière ligne.
Comprendre les composants internes de la tranche
Pour résoudre cette énigme, il est crucial de se rappeler qu'une tranche stocke les données dans un tableau. Lorsque les deux premiers éléments sont supprimés, le début de la tranche est décalé vers la droite, laissant moins d'espaces non alloués entre le point de début de la tranche et la fin du tableau de support.
À l'inverse, supprimer des éléments de la fin d'une tranche n'a aucun impact sur sa capacité car la distance entre le point de départ de la tranche dans le tableau et la fin du tableau reste inchangée.
Il est important de noter que ces opérations modifient uniquement la structure de la tranche sans affecter le tableau sous-jacent.
Exemple d'explication
En imprimant l'en-tête de la tranche, nous obtenons un aperçu des changements qui se produisent :
<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>
Dans la dernière étape, le le pointeur de données est avancé, ce qui entraîne une réduction de capacité.
Conclusion
Dans cet exemple, nous observons comment les opérations de découpage peuvent modifier la structure de la tranche. En manipulant les pointeurs, des changements de capacité peuvent se produire en fonction des actions spécifiques effectuées sur 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!