Maison >développement back-end >Golang >Pourquoi ne puis-je pas appeler une méthode de réception de pointeur sur une entrée Go Map ?
Déréférencer un index de carte dans Golang
Lorsque vous travaillez avec des cartes dans Golang, il est important de comprendre les limites du référencement des entrées de carte. Dans un scénario de programmation récent, une question s'est posée concernant l'erreur : "cannot call pointer method on f[0]".
Pour clarifier le problème, examinons le code suivant :
package main import ( "fmt" "inventory" ) func main() { x := inventory.Cashier{} x.AddItem("item1", 13) f := x.GetItems() fmt.Println(f[0].GetAmount()) }
Le problème réside dans le type de carte et la méthode appelée. Dans le fichier Driver.go, la méthode GetItems est appelée sur la structure Cashier, qui renvoie une copie de la carte des éléments. Cependant, la méthode GetAmount est une méthode de réception de pointeur, qui nécessite l'utilisation de la structure réelle.
Dans Go, les entrées de carte ne peuvent pas être adressées directement car leur adresse peut changer lorsque la carte s'agrandit ou se rétrécit. Par conséquent, vous ne pouvez pas appeler de méthodes de réception de pointeur sur les entrées de la carte.
Pour résoudre ce problème, vous pouvez modifier la méthode GetItems pour renvoyer un pointeur vers la carte à la place :
func (c *Cashier) GetItems() *map[int]item { return &c.items }
Par ce faisant, vous vous assurez que la méthode GetAmount peut être appelée directement sur l’entrée de mappe. Voici la fonction principale corrigée :
func main() { x := inventory.Cashier{} x.AddItem("item1", 13) f := x.GetItems() fmt.Println((*f)[0].GetAmount()) }
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!