[golang] for ... range指针的坑

话不多说,看代码知道输出结果么?

import (
    "github.com/spotmaxtech/gokit"
    "testing"
)

func TestRangeFault(t *testing.T) {
    l1 := []int{1,2,3,4,5}
    var l2 []*int
    for _, i := range l1 {
        l2 = append(l2, &i)
    }

    t.Log(gokit.Prettify(l2))
}

输出结果

=== RUN   TestRangeFault
--- PASS: TestRangeFault (0.00s)
    lesson18-_test.go:67: [
          5,
          5,
          5,
          5,
          5
        ]
PASS

Process finished with exit code 0

for range每次循环使用的是同一个临时变量!每次都是做了一次值拷贝而已,引用它的指针是有问题的!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,141评论 1 51
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 7,876评论 2 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,793评论 1 32
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,733评论 0 38
  • 你的情早已一刀两断 别为这份惦念而忧伤 我的爱早已石沉大海 别为这份关怀而慌乱 时光匆匆已溜走 那份思念已不敢再奢...
    残_阅读 3,161评论 1 4