什么是闭包
能访问另一个函数作用域中的变量的函数,通常以内函数可以访问外函数的变量这种形式展现


func main() {
	f := addTool()
	fmt.Println(f(1)) //11
}
func addTool() func(int) int {
	var n = 10
	return func(x int) int {
		n = n + x //可以访问外面的n
		return n
	}
}

闭包的应用
斐波那契数列

package main

import "fmt"

func main() {
	f := addTool() //执行完这行addTool()函数里面的资源并未释放
	for i := 0; i < 10; i++ {
		fmt.Println(f()) //2
	}
}
func addTool() func() int {
	var n = 1
	var k = 0
	var k2 = 0
	return func() int {
		k2 = n + k //访问到外面函数的值了
		n = k
		k = k2
		return k2
	}
}