天天看点

go语言range语句中的值的坑

在range语句中生成的数据的值是真实集合元素的副本,它们不是原有元素的引用。这意味着更新这些值将不会

修改原来的数据,同时也意味着使用这些值的地址将不会得到原有数据的指针。

package main
import "fmt"
func main(){
  data := []int{1,2,3}
  for _,v := range data{
    v *= 10 //通常数据项不会改变
  }
  fmt.Println(data) // [1 2 3]
}      

如果需要更新原有集合中的数据,可使用索引操作符来获取

package main
import "fmt"
func main(){
  data := []int{1,2,3}
  for i,_ := range data{
    data[i] *= 10
  }
  fmt.Println(data) // [10 20 30]
}      

-------------------------------------------