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