Hello, I'm trying to understand the scope of variables when using closures. I wrote a simple program to compute fibonacci sequence with a closure (see below). Knowing that named return variables are initialized to 0 (when their type is int), I tried to simplify my function ; but it doesn't compile, saying that x is undefined. I conclude that the scope of a return variable isn't the same as a "classic" variable, but I don't understand why.
Can you explain me the difference of scope between these two kind of variables please? And the reason why they don't share the same scope? My program in the Go Playground: https://play.golang.org/p/KPWK9xoNNZ const N = 10 func main() { f := fibo() for i := 0; i < N; i++ { fmt.Println(f()) } } func fibo() func() int { x, y := 0, 1 return func() int { defer func() { x, y = y, x+y }() return x } } // fibo2 doesn't compile because x is undefined in the function returned. //func fibo2() func() (x int) { // y := 1 // return func() int { // defer func() { x, y = y, x+y }() // return x // } //} Regards, Etienne Daspe -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.