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!