闭包demo
package main
import "fmt"
func AddOne() func (int) int {
var n int = 10
return func (x int) int {
n = n + x
return n
}
}
func main() {
f := AddOne()
fmt.Println(f(1))
fmt.Println(f(2))
fmt.Println(f(3))
}
输出:
$ go run main.go
11
13
16
基本理解
闭包部分为
var n int = 10
return func (x int) int {
n = n + x
return n
}
闭包就是一个函数和与其相关的引用环境组合的一个整体。
上述例子中,返回的函数和变量n构成了闭包。
由于返回的函数依赖变量n,因此形成了一个整体。此外,该返回的函数被变量f引用了,一直没被释放,因此n也一直存在。
换一种思路理解
闭包就相当于用函数式编程实现面向对象编程中的类。
简单来说,可以将闭包理解成一个类,上例中的n就是类中的一个属性。