golang支持匿名函数,可以构成闭包。
package main
import "fmt"
// 此函数返回了一个函数function,返回的函数是intSeq的函数体内部的匿名函数。
// 返回的函数对变量i进行了封闭,形成了闭包。
func intSeq() func() int {
i := 0
return func() int {
i++
return i
}
}
func main() {
// 调用intSeq,将结果(函数)返给nextInt。返回的函数可以捕获到自己的i值,此i值在每次调用nextInt函数时都会更新。
nextInt := intSeq()
// 每次调用nextInt函数时闭包的影响。
fmt.Println(nextInt())
// print
// 1
fmt.Println(nextInt())
// print
// 2
fmt.Println(nextInt())
// print
// 3
// 调用intSeq函数,生成新的闭包环境。
nextInts := intSeq()
fmt.Println(nextInts())
// print
// 1
}
68

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



