Hot For Coding
Golang在for循环里修改值

Golang是有指针概念的,想写好这门语言,避免空指针的错误还是要花点功夫的。先看看例子

package main

import (
  "fmt"
)

type Student struct {
  Age int
}

func main() {

  arr := [3]Student{
    {
      Age: 10,
    },
    {
      Age: 15,
    },
    {
      Age: 20,
    },
  }

  for _, v := range arr {
    v.Age = 0
  }

  fmt.Println(arr)

}

Output:

[{10} {15} {20}]

值没有改变,因为以上例子没有修改arr里的值,v是一个副本

把for循环改成以下语句

for i, v := range arr {
  println(&arr[i], "vs", &v)
  // v.Age = 0
}

Output:

0xc000078f30 vs 0xc000078f20
0xc000078f38 vs 0xc000078f20
0xc000078f40 vs 0xc000078f20

内存地址都不一样,自然无法修改

所以,应该把for循环改成这样

for i := range arr {
  arr[i].Age = 0
}

Output:

[{0} {0} {0}]

输出结果Okay

TITLE: Golang在for循环里修改值

LINK: https://www.qttc.net/266_golang_change_item_in_for.html

NOTE: 转载内容请注明出处