Go : opération invalide - Tapez *map[key]value ne prend pas en charge l'indexation
Dans Go, tente de transmettre une carte par pointeur et modifier la carte originale via le pointeur peut entraîner une erreur « opération invalide ». En effet, l'indexation sur un pointeur vers une carte n'est pas supportée dans Go.
Pour résoudre ce problème, il est nécessaire d'indexer sur la carte elle-même plutôt que sur le pointeur. Voici un code modifié qui montre comment procéder :
package main import "fmt" type Currency string type Amount struct { Currency Currency Value float32 } type Balance map[Currency]float32 func (b *Balance) Add(amount Amount) *Balance { current, ok := (*b)[amount.Currency] if ok { (*b)[amount.Currency] = current + amount.Value } else { (*b)[amount.Currency] = amount.Value } return b } func main() { b := &Balance{Currency("USD"): 100.0} b = b.Add(Amount{Currency: Currency("USD"), Value: 5.0}) fmt.Println("Balance: ", (*b)) }
En déréférençant le pointeur vers la carte (*b) avant l'indexation, le code modifie désormais correctement la carte d'origine.
Remarque : Bien que le code ci-dessus montre comment modifier une carte via un pointeur, il est généralement plus idiomatique de transmettre la carte par valeur dans Aller. En passant une valeur, les modifications apportées à la carte sont automatiquement propagées à la carte d'origine.
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!