Maison >développement back-end >Golang >Pourquoi réfléchit.MakeSlice renvoie-t-il une valeur non adressable ?
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)
N'oubliez pas d'utiliser x.Interface() pour éviter de transmettre le Reflect.Value au lieu de la valeur réelle de votre fonction.
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.
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!