In this block of code below, I expect the output to be 0, 1, 2, 3,..., 9. However, only the output 10, 10,...,10 is produced.
package mainimport "fmt"func adder() []func() { out := []func(){} for i := 0; i < 10; i++ { out = append(out, func() { fmt.Println(i) }) } return out}func main() { out := adder() for i := 0; i < 10; i++ { out[i]() }}
My mental model suggests that a new function is generated and stored every time in the for-loop, but it doesn't seem to be the case. Is there a solution to generating new functions without modifying the signature (no parameters or global variables) but still keeping the current value of i?