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

本文来自:开源中国博客

感谢作者:itfanr

查看原文:Go语言闭包的小例子

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。