代码 > 记录:golang中错误在for range中对值使用了指针。

2018-01-08

某段程序出错,最后定位到错误在大概这样的结构

    for _, v := range data {
        c <- &v
    }


这样,整个cannel里,都只有最后一个v值

整理了下思路,也很好理解。

这样的代码某种角度相当于

{
var v int
    for _, v = range data {
        c <- &v
    }
}   


而非

    for _, v = range data {
        var v int
        c <- &v
    }   


那自然都是最后一个值了。

作为一个每个循环中都要使用的值,自然不可能不停的创建新的。这太不环保。

但直接的写法里比较难直接看出来。

记录下,以后至少记得解决的方向

点击登录