Maison >développement back-end >Golang >Pourquoi ne puis-je pas utiliser de récepteurs de pointeurs sur les entrées de carte dans Go ?

Pourquoi ne puis-je pas utiliser de récepteurs de pointeurs sur les entrées de carte dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-21 02:00:14228parcourir

Why Can't I Use Pointer Receivers on Map Entries in Go?

Déréférencer un index de carte dans Go

Dans un programme Go, les index de carte ne peuvent pas être référencés directement. Ce problème se pose en raison de la nature dynamique des cartes, dans laquelle l'adresse d'une entrée peut changer au cours de la croissance ou du rétrécissement de la carte. Par conséquent, tenter d'appeler des méthodes de récepteur de pointeur sur des entrées de carte entraîne l'erreur suivante :

cannot call pointer method on f[0]
cannot take the address of f[0]

Pour résoudre ce problème, supprimez simplement l'astérisque (*) du récepteur de méthode dans la méthode problématique :

func (c Cashier) Buy(itemNum int){
    item, pass := c.items[itemNum]

    if pass{
        if item.amount == 1{
            delete(c.items, itemNum)
        } else{
            item.amount--
            c.items[itemNum] = item 
        }
        c.cash++
    }
}

Ce faisant, la méthode n'est plus un récepteur de pointeur, ce qui lui permet d'être appelée sur les entrées de la carte sans problème.

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!

Déclaration:
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