Maison > développement back-end > Golang > Pourquoi réfléchit.MakeSlice renvoie-t-il une valeur non adressable ?

Pourquoi réfléchit.MakeSlice renvoie-t-il une valeur non adressable ?

Mary-Kate Olsen
Libérer: 2024-12-10 12:58:14
original
730 Les gens l'ont consulté

Why does reflect.MakeSlice return an un-addressable value?

Pourquoi Reflect.MakeSlice renvoie-t-il une valeur non adressable ?

Obtention d'un pointeur de tranche à l'aide de Reflection

Pour récupérer un pointeur vers une tranche à l'aide de réflexion, utilisez reflex.New() :

my := &My{}
myType := reflect.TypeOf(my)
slice := reflect.MakeSlice(reflect.SliceOf(myType), 10, 10)
x := reflect.New(slice.Type())
x.Elem().Set(slice)
Copier après la connexion

N'oubliez pas d'utiliser x.Interface() pour éviter de transmettre le Reflect.Value au lieu de la valeur réelle de votre fonction.

Comprendre la non-adressabilité dans Reflect.MakeSlice

Une valeur adressable garantit que son adresse pointe vers un emplacement significatif. Les allocations effectuées sur la pile au sein d'une fonction ne garantissent pas cela, elles ne sont donc pas adressables.

reflect.MakeSlice attribue des valeurs à une tranche locale sur le tas sans les adresser en tant qu'éléments de tableaux, de structures ou de pointeurs déréférencés. . Par conséquent, il renvoie une valeur non adressable.

Pourquoi exiger un pointeur de tranche ?

Souvent, dans des fonctions comme iter.All de mgo, les pointeurs sont nécessaires car des tranches sont souvent ajoutées. L'ajout modifie l'adresse mémoire de la tranche, qui doit être communiquée à l'appelant.

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