Go语言闭包的小例子

itfanr · · 2286 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

 例子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语言闭包的小例子

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2286 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传