Go 示例: 闭包

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 时更新。

    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

我们将要介绍的函数的最后一个特性是递归。

下一个示例:递归.