猿问

在函数定义中使用局部值

下面的程序


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?


德玛西亚99
浏览 183回答 1
1回答

蛊毒传说

这就是惯用的做法。如果您立即调用该函数,您也可以将其作为参数传递。
随时随地看视频慕课网APP

相关分类

Go
我要回答