在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)
}
}
正好遇到,做个记录,希望能够对您有所帮助!


被折叠的 条评论
为什么被折叠?



