闭包其实也就是匿名函数的一种。是函数的嵌套使用,内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕。内层函数可以对外部捕获的变量进行访问和修改,类似于c++中static静态局部变量的作用。
package main
import (
"fmt"
)
func addf(value int) func(value2 int) int {
// 返回一个闭包
t:=10 //这个局部变量会跟随闭包生命期一直存在,类似于c++中的static局部静态变量的作用。
return func(value2 int) int {
// 累加内部局部变量,传来的形参变量
t+=value+value2
// 返回一个累加值
return t
}
}
func main() {
// 创建一个函数变量
myadd := addf(1)
// 累加1并打印
fmt.Println(myadd(2)) //返回13,闭包内局部变量t的值为13
fmt.Println(myadd(3)) //再次调用,就是13+1+3=17
// 打印函数变量地址
fmt.Printf("%p-%T\n", myadd,myadd)
}