package main
func main() {
x := []int{7, 8, 9}
y := [3]*int{}
for i, v := range x {
defer func() {
print(v)
}()
y[i] = &i
}
print(*y[0], *y[1], *y[2], " ")
}
Choices:
Answer: 222 999
Run it on Go play.
Key points:
i
and v
)
are shared by all loop steps. In other words, each iteration variable only has
one instance during the execution of the loop.
That means all the elements of y
store the same address (of the value v
).
i
is set as 2
,
and the variable v
is set as 9
.
Different from the above program, the following one prints 012 987
.
package main
func main() {
x := []int{7, 8, 9}
y := [3]*int{}
for i, v := range x {
defer print(v)
i := i
y[i] = &i
}
print(*y[0], *y[1], *y[2], " ")
}