Golang的 for 遍历临时变量


Golang的 for 遍历临时变量

问题描述

当我们对for循环中的遍历的item进行修改时,这个修改是不生效的。
package main

import "fmt"

func main() {
    arr := []int{1, 2, 3, 4, 5, 6}
    fmt.Println("修改前,arr=", arr)
    // for循环遍历中修改,a是临时变量,修改后arr不变
    for _, item := range arr {
        if item == 3 {
            item = 33
        }
    }
    fmt.Println("第一次修改后,arr=", arr)
}
如果我们执行以上的代码,程序输出如下   但是如果我们确实需要对遍历的数组进行修改时,我们可以直接根据数组的下标对其进行修改  
package main
import "fmt"
func main() {
    arr := []int{1, 2, 3, 4, 5, 6}
    fmt.Println("修改前,arr=", arr)
    // for循环遍历中修改,通过下标进行修改是可以的
    for index, a := range arr {
        if a == 3 {
            arr[index] = 33
        }
    }
    fmt.Println("第二次修改后,arr=", arr)
}
程序会产生以下输出,我们可以看到数组被成功修改了。  

总结

1. for循环中,遍历变量是临时变量,修改不影响原始变量 2. for循环中如果想修改原始变量,可以直接修改原始变量本身才行