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

liuzoxan · · 1620 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

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每次循环使用的是同一个临时变量!每次都是做了一次值拷贝而已,引用它的指针是有问题的!


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:liuzoxan

查看原文:[golang] for ... range指针的坑

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1620 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传