Méthodes de récepteur de pointeur sur les index de carte dans Go
Dans Go, un index de carte n'est pas accessible à l'aide d'une méthode de récepteur de pointeur. L'impossibilité de déréférencer un index de carte survient lorsque vous tentez d'appeler une méthode de réception de pointeur sur une entrée de carte. Pour comprendre ce concept, examinons un exemple :
Présentation du code :
Considérez l'extrait de code suivant :
package main import ( "fmt" "inventory" ) func main() { x := inventory.Cashier{} x.AddItem("item1", 13) f := x.GetItems() fmt.Println(f[0].GetAmount()) }
Dans cet exemple , nous avons une structure Cashier avec une carte d'éléments, chaque élément étant représenté par une structure d'élément. La méthode GetAmount de la structure item est définie comme un récepteur de pointeur.
Le problème :
Lorsque vous essayez d'exécuter ce programme, vous rencontrez l'erreur suivante :
cannot use pointer method on f[0]
Comprendre l'erreur :
Le message d'erreur indique que vous ne pouvez pas appelez une méthode de réception de pointeur sur un index de carte, qui est f[0] dans ce cas. Pour comprendre pourquoi cela se produit, nous devons saisir la nature des index cartographiques.
Index cartographiques :
Les cartes dans Go sont implémentées à l'aide de hachages. Chaque paire clé-valeur dans une carte est stockée à un emplacement spécifique de la mémoire déterminé par le hachage de la clé. Par conséquent, l'adresse d'une entrée de carte peut changer si la carte s'agrandit ou se rétrécit.
Méthodes de récepteur de pointeur :
Les méthodes de récepteur de pointeur sont utilisées lorsque vous souhaitez modifier directement la structure sous-jacente. Cependant, comme l'adresse d'une entrée de carte peut changer, il n'est pas possible d'utiliser des méthodes de réception de pointeur sur les index de carte.
Solution :
Pour résoudre ce problème, vous pouvez soit :
Approche recommandée :
L'approche recommandée consiste à définir la méthode comme func (i item) et à appeler la méthode sur l'élément. Cela garantit que la méthode opère sur une copie de l'élément et ne modifie pas directement la carte.
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!