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循环中如果想修改原始变量,可以直接修改原始变量本身才行