Maison > développement back-end > Golang > Pourquoi est-ce que j'obtiens « Opération non valide – Type *map[key]value ne prend pas en charge l'indexation » dans Go ?

Pourquoi est-ce que j'obtiens « Opération non valide – Type *map[key]value ne prend pas en charge l'indexation » dans Go ?

Susan Sarandon
Libérer: 2024-11-14 11:08:02
original
380 Les gens l'ont consulté

Why Do I Get

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))
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal