在函数定义中使用本地值

时间:2014-09-18 15:03:28

标签: go

以下计划

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

1 个答案:

答案 0 :(得分:1)

这种惯用的方式。

如果您立即调用该函数,也可以将其作为参数传递。