以下计划
package main
import (
"fmt"
)
type TestFunc func()
func main() {
fmt.Println()
funcs := []TestFunc{}
for i:=0; i<5; i++ {
//i := i
funcs = append(funcs, func() {fmt.Println(i)})
}
for _, f := range funcs {
f()
}
}
产生输出5,5,5,5,5。取消注释该行后,程序
for i:=0; i<5; i++ {
i := i
funcs = append(funcs, func() {fmt.Println(i)})
}
for _, f := range funcs {
f()
}
产生输出0,1,2,3,4。
是否有更好的(或惯用的)方法将当前值传递给函数声明而不是使用i := i
?
答案 0 :(得分:1)
是这种惯用的方式。
如果您立即调用该函数,也可以将其作为参数传递。