在线文档 > Golang练习 > 闭包
Go 支持 匿名函数,这些函数可以形成闭包。
匿名函数在你想要在不需要命名的情况下内联定义函数时很有用。
package main
import "fmt"
// 这个名为 intSeq 的函数返回另一个函数,我们将其匿名定义在 intSeq 函数体中。
// 返回的函数使用闭包结构 捕获 变量 i。
func intSeq() func() int {
i := 0
return func() int {
i++
return i
}
}
func main() {
// 我们调用 `intSeq`,并将返回值(一个函数)赋值为 `nextInt`。
// 这个函数值捕获了它自己的 `i` 值,每次调用 `nextInt` 都会更新 `i` 的值。
nextInt := intSeq()
// 通过调用 `nextInt` 几次来查看闭包的效果。
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
// 为了确认状态是特定于该特定函数的,请创建并测试一个新的函数。
newInts := intSeq()
fmt.Println(newInts())
}
运行结果如下:
$ go run closures.go
1
2
3
1
我们马上要学习关于函数的最后一个特性:递归。