Maison >développement back-end >Golang >Pourquoi l'indexation d'une carte passée par un pointeur dans Go provoque-t-elle des erreurs de compilation ?

Pourquoi l'indexation d'une carte passée par un pointeur dans Go provoque-t-elle des erreurs de compilation ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-13 00:36:02967parcourir

Why Does Indexing a Map Passed by Pointer in Go Cause Compilation Errors?

Passer des cartes par valeur ou par pointeur dans Go

Dans Go, passer par valeur et par pointeur peut prêter à confusion, surtout lorsqu'il s'agit de types de cartes. Cet article aborde le problème de l'indexation d'une carte passée par pointeur, qui entraîne des erreurs de compilation.

Le problème

Lorsque l'on tente de passer une carte par pointeur et de modifier sa valeurs, Go génère une erreur indiquant que le type ne prend pas en charge l'indexation. En effet, l'indexation sur un pointeur n'est pas prise en charge pour les cartes.

La solution

Pour éviter cette erreur, déréférencez le pointeur avant d'indexer la carte. Au lieu de b[amount.Currency], utilisez (*b)[amount.Currency].

Discussion supplémentaire

Par défaut, les types simples comme les entiers sont transmis par valeur, tandis que les structures et les interfaces sont transmises par référence. Toutefois, ce n’est pas le cas pour les cartes. Les cartes sont transmises par référence par défaut, donc les transmettre par valeur ou par pointeur est essentiellement la même chose.

Dans l'exemple ci-dessus, l'utilisation d'un récepteur de pointeur pour la méthode Add n'est pas nécessaire car la carte est déjà passée par référence. La méthode pourrait s'écrire comme suit sans aucune perte de fonctionnalité :

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
}

En résumé, lorsque l'on travaille avec des cartes, il n'est pas nécessaire de les passer par pointeur pour éviter la copie. Le passage par valeur permet d'obtenir le même résultat sans avoir besoin de déréférencer.

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