循环指针型,结果全是最后一个
解决:
for _, v := range usersRes {
v2 := v
users = append(users, &v2)
}
直接使用同名变量:
for _, dir := range tempDirs() { dir := dir // declares inner dir, initialized to outer dir // ... }
详细:
//receiver
for v := range ch {
fmt.Println(v)
}
输出:
0x416020
0x416020
0x416020
0x416020
0x416020
5次输出变量 v ( *int )都指向了同一个地址。在 for range 语句中, v 变量用于保存迭代 input 数组所得的值,但是 v 只被声明了一次,此后都是将迭代 input 出的值赋值给 v , v 变量的内存地址始终未变。
### 实验:
---------------------------
arr := []int{1, 2, 3}
for _, v := range arr {
print(v, "\n")
}
1
2
3
---------------------------
arr := []int{1, 2, 3}
for _, v := range arr {
print(&v, "\n")
}
0xc00003df60
0xc00003df60
0xc00003df60
---------------------------
type tmp struct {
value int
}
arr := []*tmp{{value: 1}, {value: 2}, {value: 3}}
for _, v := range arr {
print(v, "\n")
}
0xc00003df48
0xc00003df60
0xc00003df58
arr本来就是一个指针数组,每个v值就是arr的每项
---------------------------