Go语言闭包的小例子

 例子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
 

你可能感兴趣的:(Go语言闭包的小例子)