loop 1

What does the following program print?
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:

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], " ")
}