range遍历中需要注意的地方

例如以下程序:

package main

import "fmt"

func main(){

    s := [3]int{0,1,2}//array

    for k, v := range s {

        if 0==k {

           s[1] = 999

           s[2] = 999

           fmt.Printf("%v\n", s)//打印结果:[0 999 999]

        }

        s[k] = v+100

    }

    fmt.Printf("%v\n", s)//打印结果:[100 101 102]

}

对于数组s := [3]int{0,1,2}进行range的时候,k和v是复制后的值,不是引用

如果将s := [3]int{0,1,2}修改为s := []int{0,1,2}这时候s是slice,range时,k和v将是引用,其结果将大不同。如下:

package main

import "fmt"

func main(){

    s := []int{0,1,2}//slice

    for k, v := range s {

        if 0==k {

           s[1] = 999

           s[2] = 999

           fmt.Printf("%v\n", s)//打印结果:[0 999 999]

        }

        s[k] = v+100

    }

    fmt.Printf("%v\n", s)//打印结果:[100 1099 1099]

}



你可能感兴趣的:(range遍历中需要注意的地方)