go 1.22 关于 for 循环问题的困惑

在 Go 1.21 中,当 for 循环中的闭包引用了循环变量时,编译器会自动将每次循环的变量快照传递给闭包。这样,闭包在执行时使用的是迭代过程中捕获的值,而不是循环结束后的变量最终值。

funcs := []func(){}

for i := 0; i < 3; i++ {
	funcs = append(funcs, func() {
		fmt.Println(i)
	})
}

for _, f := range funcs {
	f()
}

这样写是没问题的