Home  >  Article  >  Backend Development  >  Go: Why Am I Getting "Invalid Operation: type *map[key]value does not support indexing."?

Go: Why Am I Getting "Invalid Operation: type *map[key]value does not support indexing."?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-12 04:53:01284browse

Go: Why Am I Getting

Go: Addressing "Invalid Operation" Error in Map Indexing

When working with maps in Go, you may encounter the compiler error "invalid operation: type *map[key]value does not support indexing." This error occurs when you attempt to index a pointer to a map instead of the map itself.

Consider the following code:

func (b *Balance) Add(amount Amount) *Balance {
    current, ok := b[amount.Currency] // Error: indexing pointer to map
    ...
}

To resolve this error, you should modify your code to index the map through the pointer correctly:

func (b *Balance) Add(amount Amount) *Balance {
    current, ok := (*b)[amount.Currency] // Index the map through the pointer
    ...
}

Alternatively, if your struct is solely a map, it's recommended to avoid defining methods that receive map pointers as they offer no benefit. Instead, define methods that receive the map by value, as shown below:

import "fmt"

type Currency string

type Amount struct {
    Currency Currency
    Value float32
}

type Balance map[Currency]float32

func (b Balance) Add(amount Amount) Balance { // Method receives map by value
    current, ok := b[amount.Currency]
    ...
}

func main() {
    b := Balance{Currency("USD"): 100.0}
    b = b.Add(Amount{Currency: Currency("USD"), Value: 5.0})

    fmt.Println("Balance: ", b)
}

This approach avoids the error associated with indexing a map through a pointer while maintaining the reference nature of the map type.

The above is the detailed content of Go: Why Am I Getting "Invalid Operation: type *map[key]value does not support indexing."?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn