匿名函数和闭包:
闭包和匿名函数经常一起使用,可以使用闭包来访问函数中的局部变量(被访问操作的变量为指针指向关系,操作的是同一个局部变量)如:
func closure(x int) (func(), func(int)) { fmt.Printf("初始值x为:%d,内存地址:%p\n", x, &x) f1 := func() { x = x + 5 fmt.Printf("x+5:%d,内存地址:%p\n", x, &x) } f2 := func(y int) { x = x + y fmt.Printf("x+%d:%d,内存地址:%p\n", y, x, &x) } return f1, f2 } func main() { func1, func2 := closure(10) func1() func2(10) func2(20) }输出结果为:
初始值x为:10,内存地址:0xc080000038
x+5:15,内存地址:0xc080000038
x+10:25,内存地址:0xc080000038
x+20:45,内存地址:0xc080000038
个人理解:
其实理解闭包的最方便的方法就是将闭包函数看成一个类,一个闭包函数调用就是实例化一个类。但很遗憾的是,目前我还无法领会闭包设计思想背后的精髓含义以及其所蕴含的哲学思想。
参考
关于golang中函数可参考如下一些资料,可能会有助于理解golang中的函数和闭包
http://ieqi.net/2013/03/11/%E7%9C%8B%E8%8C%83%E4%BE%8B%E5%AD%A6-golang-%EF%BC%88%E5%8D%81%E4%BA%94%EF%BC%89-%E9%97%AD%E5%8C%85/
有疑问加站长微信联系(非本文作者)