例子1
package main import ( "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 } }打印结果是:
0x118400e8 0x118400e8 0x118400e8
例子2
package main import ( "fmt" ) func main() { for i := 0; i < 3; i++ { defer func() { fmt.Println(i) }() } }打印结果是:
3 3 3
例子3
package main import ( "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 = 4 close i = 4 close i = 4 close i = 4 defer closure i= 4 defer i = 3 defer closure i= 4 defer i = 2 defer closure i= 4 defer i = 1 defer closure i= 4 defer i = 0
有疑问加站长微信联系(非本文作者)