例子1
package mainimport ( "fmt")func main() { f := closer(10) //fmt.Println(f(1)) //fmt.Println(f(2)) f(1) f(2)}func closer(x int) func(int) int { fmt.Printf("%p\n", &x) return func(y int) int { fmt.Printf("%p\n", &x) return x + y }}打印结果是:
0x118400e80x118400e80x118400e8
例子2
package mainimport ( "fmt")func main() { for i := 0; i < 3; i++ { defer func() { fmt.Println(i) }() }}打印结果是:
333
例子3
package mainimport ( "fmt")func main() { var fs = [4]func(){} for i := 0; i < 4; i++ { defer fmt.Println("defer i =", i) defer func() { fmt.Println("defer closure i=", i) }() fs[i] = func() { fmt.Println("close i = ", i) } } for _, f := range fs { f() }}打印结果:
close i = 4close i = 4close i = 4close i = 4defer closure i= 4defer i = 3defer closure i= 4defer i = 2defer closure i= 4defer i = 1defer closure i= 4defer i = 0