首页 > 后端开发 > Golang > 正文

Go:为什么我收到'无效操作:类型 *map[key]value 不支持索引。”?

Mary-Kate Olsen
发布: 2024-11-12 04:53:01
原创
322 人浏览过

Go: Why Am I Getting

Go:解决映射索引中的“无效操作”错误

在 Go 中使用映射时,您可能会遇到编译器错误“无效”操作:类型 *map[key]value 不支持索引。”当您尝试对指向地图的指针而不是地图本身进行索引时,会发生此错误。

请考虑以下代码:

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

要解决此错误,您应该将代码修改为通过指针正确索引映射:

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

或者,如果您的结构只是一个映射,建议避免定义接收的方法映射指针,因为它们没有任何好处。相反,定义按值接收映射的方法,如下所示:

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)
}
登录后复制

这种方法避免了与通过指针索引映射相关的错误,同时保持映射类型的引用性质。

以上是Go:为什么我收到'无效操作:类型 *map[key]value 不支持索引。”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板