无效操作:Go 令人困惑的映射指针索引
在 Go 中操作映射时,可能会遇到错误消息:“无效操作 - 输入map[key]value 不支持索引。”当尝试索引映射指针 (map[key]value) 而不是映射值本身时,会出现此错误。与结构体的规范相反,映射不会自动取消引用。
解决此问题的关键是在执行索引操作之前取消引用指针以访问映射值。考虑以下示例:
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 }
在这种情况下,使用“”运算符取消引用“map[key]value”,以在索引之前显示实际的映射值。
Go 对映射的指针处理与结构体的指针处理不同。为了避免过度复制,没有必要定义采用映射指针的接收器函数。相反,直接传递映射值,如原始代码片段所示。
通过理解 Go 中映射指针的细微差别,程序员可以有效地解决这个神秘的错误消息并自信地操作映射,而不需要不必要的操作价值复制。
以上是为什么Go会抛出'无效操作-类型Map[key]value不支持索引”?的详细内容。更多信息请关注PHP中文网其他相关文章!