Maison >développement back-end >Golang >Pourquoi Go lance-t-il « Opération invalide – Type Map[key]value ne prend pas en charge l'indexation » ?

Pourquoi Go lance-t-il « Opération invalide – Type Map[key]value ne prend pas en charge l'indexation » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-21 07:42:18596parcourir

Why Does Go Throw

Opération invalide : indexation perplexe du pointeur de carte de Go

Lors de la manipulation de cartes dans Go, on peut rencontrer le message d'erreur : "opération invalide - tapez map[key]value ne prend pas en charge l'indexation." Cette erreur se produit lors de la tentative d'indexation d'un pointeur de carte (map[key]value) au lieu de la valeur de la carte elle-même. Contrairement à la norme avec les structures, le déréférencement n'est pas automatisé pour les cartes.

La clé pour résoudre ce problème est de déréférencer le pointeur pour accéder à la valeur de la carte avant d'effectuer les opérations d'indexation. Prenons l'exemple suivant :

func (b *Balance) Add(amount Amount) *Balance {
    // Dereference the pointer to access the map
    current, ok := (*b)[amount.Currency]

    if ok {
        (*b)[amount.Currency] = current + amount.Value
    } else {
        (*b)[amount.Currency] = amount.Value
    }
    return b
}

Dans ce scénario, la "map[key]value" est déréférencée à l'aide de l'opérateur "" pour révéler la valeur réelle de la carte avant l'indexation.

La gestion du pointeur de Go pour les cartes diffère de celle des structures. Pour éviter une copie excessive, il n'est pas nécessaire de définir des fonctions de récepteur prenant en charge des pointeurs de carte. Au lieu de cela, transmettez directement la valeur de la carte, comme démontré dans l'extrait de code d'origine.

En comprenant les nuances subtiles des pointeurs de carte dans Go, les programmeurs peuvent résoudre efficacement ce message d'erreur énigmatique et manipuler les cartes en toute confiance sans avoir besoin de manipulations inutiles. valeur de copie.

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