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
Mary-Kate Olsenoriginal
2024-12-11 06:28:10152parcourir

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]

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))

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!

Déclaration:
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