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())
}
|