Go编程语言支持可以充当函数闭包的匿名函数,当我们要内联定义函数而不传递任何名称时,将使用匿名函数。
在我们的示例中,我们创建了一个函数getSequence(),该函数返回另一个函数,此函数的目的是关闭上层函数的变量i形成闭包。如-
package main import "fmt" func getSequence() func() int { i:=0 return func() int { i+=1 return i } } func main(){ /* nextNumber 现在是 i 为 0 的函数 */ nextNumber := getSequence() /* 调用 nextNumber 将 i 增加 1 并返回相同的值 */ fmt.Println(nextNumber()) fmt.Println(nextNumber()) fmt.Println(nextNumber()) /* 创建一个新序列并查看结果,i 再次为 0*/ nextNumber1 := getSequence() fmt.Println(nextNumber1()) fmt.Println(nextNumber1()) }
编译并执行上述代码后,将产生以下输出-
1 2 3 1 2
参考链接
https://www.learnfk.com/go/go-function-closures.html
标签:闭包,getSequence,函数,fmt,无涯,Println,func,Go,nextNumber From: https://blog.51cto.com/u_14033984/8922606