Go语言支持匿名函数。匿名函数可以组成函数闭包。当你想定义一个不需要命名的内联函数时,匿名函数是非常有用的。
package main
import "fmt"
// 这个"intSeq"函数返回另外一个在intSeq内部定义的匿名函数,
// 这个返回的匿名函数包住了变量i,从而形成了一个闭包
func intSeq() func() int {
i := 0
return func() int {
i += 1
return i
}
}
func main() {
// 我们调用intSeq函数,并且把结果(函数)赋值给一个函数nextInt,
// 这个nextInt函数拥有自己的i变量,这个变量每次调用都被更新。
// 这里i的初始值是由intSeq调用的时候决定的。
nextInt := intSeq()
// 调用几次nextInt,看看闭包的效果
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
// 为了确认闭包的状态是独立于intSeq函数的,再创建一个。
newInts := intSeq()
fmt.Println(newInts())
}
输出
$ go run closures.go
1
2
3
1
下一个章节,我们将学习函数的最后一个特性:递归。
下一个例子:Go by Example:Recursion。

本文通过一个具体的Go语言示例介绍了闭包的概念及其工作原理。闭包允许一个函数记住并访问其定义时所在作用域中的变量,即使在函数被调用时已经离开了那个作用域。文章展示了如何使用闭包来实现计数器的功能,并强调了闭包状态的独立性。
1978

被折叠的 条评论
为什么被折叠?



