Dévoilement du mystère des tableaux sous-jacents Slice dans Go
Dans le domaine de la programmation Go, les tranches agissent comme un moyen flexible de gérer des collections de données sans avoir besoin de longueurs préfixées. Ils fournissent un mécanisme dynamique pour accéder à une séquence contiguë d’éléments. Cependant, lorsque l'on travaille avec des tranches, il est souvent essentiel de comprendre le tableau sous-jacent auquel elles font référence.
Considérons ce scénario : nous avons un tableau d'entiers de longueur 3 :
nums := [3]int{1, 2, 3}
Créer une tranche en découpant les deux premiers éléments :
numSlice := nums[:2]
Dans ce cas, le plafond de numSlice et de nums est de 3, indiquant le sous-jacent capacité du tableau, tandis que len est respectivement de 2 et 3. Maintenant, si nous ajoutons un élément à numSlice :
numSlice = append(numSlice, 10)
Le tableau sous-jacent nums devient [1 2 10], indiquant que numSlice fait toujours référence au tableau d'origine. La capacité reste de 3 pour numSlice et len.
Cependant, lors de la deuxième opération d'ajout :
numSlice = append(numSlice, 20)
Le tableau sous-jacent de numSlice doit changer car sa capacité est atteinte. Ce nouveau tableau sous-jacent se reflète dans la capacité doublée et dans une lentille mise à jour de 4 pour numSlice.
Récupération de la référence au nouveau tableau
Pour accéder au sous-jacent nouvellement créé array, nous pouvons exploiter la combinaison de packages réfléchissants et non sécurisés dans Go. La structure Reflect.SliceHeader fournit un champ nommé Data, qui contient un pointeur vers le tableau sous-jacent d'une tranche.
s := []int{1, 2, 3, 4} hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) data := *(*[4]int)(unsafe.Pointer(hdr.Data))
En utilisant cette technique, vous pouvez accéder et manipuler directement le tableau sous-jacent, vous offrant ainsi des informations plus approfondies. contrôle sur la gestion des données dans vos programmes Go.
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!