Maison > développement back-end > Golang > Pourquoi la fonction « reflect.MakeSlice » renvoie-t-elle une valeur non adressable ?

Pourquoi la fonction « reflect.MakeSlice » renvoie-t-elle une valeur non adressable ?

Patricia Arquette
Libérer: 2024-11-08 07:46:02
original
465 Les gens l'ont consulté

Why is the `reflect.MakeSlice` Function Returning an Un-Addressable Value?

Pourquoi Reflect.MakeSlice renvoie une valeur non adressable

Dans Go, le package Reflect fournit une interface pour inspecter et manipuler les types et les valeurs. Reflect.MakeSlice crée une tranche d'un type donné. Cependant, la valeur renvoyée n'est pas adressable. Cela signifie que vous ne pouvez pas prendre son adresse ni l'attribuer à un pointeur.

Solution : Utiliser Reflect.New()

Pour obtenir une tranche adressable par réflexion, vous peut utiliser la fonction reflex.New() pour créer un pointeur vers la tranche. Cela peut être fait comme suit :

// Create the slice type
sliceType := reflect.SliceOf(SomeType)

// Create a slice using reflect.MakeSlice
slice := reflect.MakeSlice(sliceType, 10, 10)

// Create a pointer to the slice
slicePtr := reflect.New(slice.Type())

// Set the slice pointer to the slice
slicePtr.Elem().Set(slice)
Copier après la connexion

Maintenant, vous disposez d'une tranche adressable qui peut être transmise comme argument aux fonctions qui nécessitent un pointeur de tranche.

Pourquoi réfléchir. MakeSlice renvoie une valeur non adressable

Les variables de pile locales dans Go ne sont pas adressables car le moteur d'exécution peut les déplacer vers le tas à tout moment. Reflect.MakeSlice crée une variable de tranche locale, c'est pourquoi la valeur renvoyée n'est pas adressable.

Pourquoi un pointeur vers une tranche est requis

Certaines API, telles comme celui que vous avez mentionné dans le package mgo, nécessite un pointeur vers une tranche comme argument. En effet, lors de l'ajout à la tranche, une nouvelle tranche avec une capacité accrue peut être allouée. Si vous passez une tranche sans pointeur, les modifications apportées à la tranche ne seront pas visibles en dehors de la fonction.

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