关于go语言的闭包

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("closure i = ", i) }
	}

	for _, f := range fs {
		f()
	}
}

 这两天有时间学习了一下go语言。挺有趣的。

上面这段代码是关于closure和defer的用法。

go语言支持闭包,如果你在闭包函数中使用了上层函数的变量,那么这个变量的一个内存地址会记录到这个闭包中,当你调用这个闭包函数的时候,这个变量的值会直接去记录的内存地址里取,所以就得到了这个打印:

closure i =  4
closure i =  4
closure i =  4
closure 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

 

本文来自:ITEYE博客

感谢作者:freshunter

查看原文:关于go语言的闭包

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