Go:无效操作 - 类型 *map[key]value 不支持索引
在 Go 中,尝试通过指针传递映射而通过指针修改原图可能会导致“无效操作”错误。这是因为 Go 不支持在指向映射的指针上建立索引。
要解决此问题,需要在映射本身而不是指针上建立索引。下面是一个修改后的代码,演示了如何执行此操作:
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)) }
通过在索引之前取消引用指向地图 (*b) 的指针,代码现在可以正确修改原始地图。
注意: 虽然上面的代码演示了如何通过指针修改映射,但在 Go 中按值传递映射通常更惯用。通过传递一个值,对地图所做的更改会自动传播回原始地图。
以上是为什么在 Go 中出现'无效操作 - 类型 *map[key]value 不支持索引”?的详细内容。更多信息请关注PHP中文网其他相关文章!