闭包就是一个函数与其相关的引用环境组成的一个实体,看个例子:
func addOne() func (int) int{
var n int = 0
return func (x int) int{
n = n + x
return n
}
}
上面标红的代码段就是一个闭包,下面看下主函数中的调用来说明引用环境的问题:
func main() {
func := addOne()
fmt.Println(func(1)) //输出1
fmt.Println(func(2)) //输出3
fmt.Println(func(3)) //输出6
}
上面标红部分需要重点理解,闭包外部变量n会被闭包修改,且相当于全局变量(或者是静态变量),它的值可以保存。
闭包的好处:在一些场景下可以简化代码设计(目前还没发现这种案例!!)。