go 如何 循环和修改指针类型的map数据 - cannot range over m (variable of type *map[string]interface{}) 解决方法

在go语言中map数据属于引用类型, 对于指针类型的map数据的循环 如果我们直接使用变量名来进行range循环的话,就会提示  cannot range over m (variable of type *map[string]interface{})

异常的代码如下,当我们对一个类型为map指针的变量m进行循环时 就会抛 cannot range over m (variable of type *map[string]interface{}) 异常

// 注意这里的第二个参数 是一个指针类型的map
func Scan2Map(stru interface{}, m *map[string]interface{}) error {
    
    // 这样的话直接抛异常了 
    for k, v := range m {
        // 
    }

}

解决方法就是 在range循环的时候将  m 改为  *m 即可! 即要使用*将指针指向具体的值之后才能进行循环。

如果我们需要在循环体内修改map的值的话也是一样需要使用 * 获取指针对应的值之后才能操作,注意这里有个运算符优先级的问题, 所以在修改指针类型的map数据的时候需要加小括号  如:

  
    for k, v := range *m {
        // 如果v的数据类型为 int 
        if  vi,ok:=v.(int);ok{
            
            // 注意这里的括号,必须否则 又会抛异常 invalid operation: cannot index m
            (*m)[k]= int64(vi)
        }
        
    }

正好遇到,做个记录,希望能够对您有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tekin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值