首页 > 后端开发 > Golang > 为什么在 Go 中出现'无效操作 - 类型 *map[key]value 不支持索引”?

为什么在 Go 中出现'无效操作 - 类型 *map[key]value 不支持索引”?

Susan Sarandon
发布: 2024-11-14 11:08:02
原创
380 人浏览过

Why Do I Get

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中文网其他相关文章!

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