In the following snippet I create a func list that should, the way I see it, contain funcs that print the numbers 0 1 2.
package main
import "fmt"
func main() {
flist := make([]func(), 0)
for i := 0; i < 3; i++ {
flist = append(flist, func() { fmt.Printf("%d ", i) })
}
for j := 0; j < 3; j++ {
flist[j]()
}
}
However, all funcs in flist
are the same main.main.func1
and the output is
3 3 3
even though i
never reaches the value 3 in the loop. This would make me thing the func is simply taking the address of i
, creating the same func every time but that i
is out of scope when the funcs are called later.
What am I missing here?