闭包:
- 局部变量的生命周期会发生改变,正常的局部变量随着函数的调用而创建,随着函数的结束而销毁
- 但是闭包结构中的外层函数的局部变量并不会随着外层函数的结束而销毁,因为内层函数还会使用
示例:
package main
import "fmt"
func increment() (func() int) {
i := 0 // 定义一个局部变量
// 定义一个局部函数
fun := func() int {
i++
return i
}
return fun
}
func main() {
res1 := increment()
fmt.Printf("%T\n", res1) // func() int
fmt.Println(res1) // 0x323xfd75
v1 := res1()
fmt.Println(v1) // 1
v2 := res1()
fmt.Println(v2) // 2
res2 := increment()
v3 := res2()
fmt.Println(v3) // 1
v4 := res1()
fmt.Println(v4) // 3
}