美文网首页
go range踩过的那些坑

go range踩过的那些坑

作者: 币来币往 | 来源:发表于2018-09-21 14:50 被阅读0次

首先我们看下面这段代码,及其输出结果:

number := [...]int{1, 2, 3, 4, 5, 6}
    for i, e := range number {
        if i == len(number)-1 {
            number[0] += e
        } else {
            number[i+1] += e
        }
    }
    fmt.Println(number)

output:  [7 3 5 7 9 11]

如果结果和你预测的一样,恭喜你跨过了这个坑。
如果不一样,往下看:

number := []int{1, 2, 3, 4, 5, 6}
    for i, e := range number {
        if i == len(number)-1 {
            number[0] += e
        } else {
            number[i+1] += e
        }
    }
    fmt.Println(number)

output:  [49 10 15 22 31 42]

再看完这段代码,有没有想起来点什么。如果还是不明白,接着往下看
解释: range后面跟的表达式称作range表达式,它只会在range语句第一次循环的时候执行一次,表达式的结果会被复制一份来做接下来的迭代操作。第一个例子数组是值类型,所以迭代的数组和number是两个不同的数组;slice是指针类型数据,所以复制的是指针,两个指针指向的是同一个内存地址,所以操作的是同一份数据

相关文章

网友评论

      本文标题:go range踩过的那些坑

      本文链接:https://www.haomeiwen.com/subject/qjganftx.html