登录
首页 >  Golang >  Go教程

为什么 for range 和 for i 遍历切片时输出结果会不同?

时间:2024-10-30 22:36:50 344浏览 收藏

大家好,今天本人给大家带来文章《为什么 for range 和 for i 遍历切片时输出结果会不同?》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

为什么 for range 和 for i 遍历切片时输出结果会不同?

for range和for i 输出结果不同的原因

在使用 for range 和 for i 遍历切片时,你可能会注意到输出结果不一样。这是因为 for range 返回的是切片元素的副本,而 for i 返回的是切片元素的引用。

例如,在以下代码中:

func main() {
    arr := make([]int, 2, 5)
    for i := 0; i < len(arr); i++ {
        arr[i] = i
    }
    examplefunc(arr)

    for v:= range arr {
        fmt.printf("%d\n", v) //输出0 1
    }

    for i := 0; i <len(arr); i++ {
        fmt.printf("%d\n",arr[i]) //输出100 101
    }
}

examplefunc 函数修改了传入的切片元素。在 for range 遍历中,返回的是切片的副本,因此输出的是修改前的值(0 和 1)。而 for i 遍历中,返回的是切片元素的引用,因此输出的是修改后的值(100 和 101)。

要使用 for range 获得切片元素的实际值,可以使用下划线 _ 占位符:

for _, v:= range arr {
    fmt.Printf("%d\n", v)
}

这样,for range 就会返回切片元素的副本,而 _ 占位符将舍弃索引值,仅输出实际值。

到这里,我们也就讲完了《为什么 for range 和 for i 遍历切片时输出结果会不同?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>