Go闭包

来源:互联网 发布:ubuntu 开放端口 编辑:程序博客网 时间:2024/06/06 03:51

通过访问外部变量,一个闭包可以维持(keep alive)这些变量。在内部函数和外部函数的例子中,外部函数可以创建局部变量,并且最终退出;但是,如果任何一个或多个内部函数在它退出后却没有退出,那么内部函数就维持了外部函数的局部数据。


关键词:维持外部数据,直至闭包(一个对象)的生命结束。


package mainimport "fmt"func adder() func(int) int {    sum := 0 //外部数据    return func(x int) int {        sum += x        return sum    }}func main() {    pos, neg := adder(), adder()    for i := 0; i < 10; i++ {        fmt.Println(            pos(i), //维持,实现累加            neg(-2*i),        )    }}

输出:

0 01 -23 -66 -1210 -2015 -3021 -4228 -5636 -7245 -90Program exited.

JavaScript闭包一句话解释:http://kb.cnblogs.com/page/110782/

耗子的闭包:http://coolshell.cn/articles/6731.html

Go闭包实现斐波那契: https://gist.github.com/resouer/10739898

0 0
原创粉丝点击