Maison > développement back-end > Golang > Quel est le lien entre les tranches Go et leurs tableaux sous-jacents ?

Quel est le lien entre les tranches Go et leurs tableaux sous-jacents ?

Mary-Kate Olsen
Libérer: 2024-12-11 06:28:10
original
156 Les gens l'ont consulté

How Do Go Slices Relate to Their Underlying Arrays?

Comprendre les tranches et leurs tableaux sous-jacents dans Go

Dans Go, une tranche représente un segment contigu d'un tableau sous-jacent. Le découpage d'un tableau crée une nouvelle tranche qui fait référence au même tableau sous-jacent que l'original, mais avec sa propre longueur et sa propre capacité.

Considérez l'exemple suivant où une tranche est créée à partir d'un tableau :

nums := [3]int{1, 2, 3}
numSlice := nums[:2]
Copier après la connexion

Dans ce cas, la tranche numSlice contient les deux premiers éléments du tableau nums. Cependant, la tranche numSlice et le tableau d'origine nums pointent vers le même tableau sous-jacent en mémoire.

L'ajout d'éléments à la tranche modifie le tableau sous-jacent. Cependant, si la limite de capacité de la tranche est atteinte, le tableau sous-jacent doit être redimensionné pour accueillir les éléments supplémentaires.

Pour accéder au tableau sous-jacent d'une tranche, vous pouvez utiliser les packages reflex et unsafe dans Go. Le type reflex.SliceHeader donne accès au pointeur du tableau sous-jacent.

s := []int{1, 2, 3, 4}
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s))
data := *(*[4]int)(unsafe.Pointer(hdr.Data))
Copier après la connexion

Ce code récupère le tableau sous-jacent sous forme de pointeur vers un tableau typé (*[4]int), permettant de modifier le tableau directement.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal