1、闭包(Closure)
1.1、闭包概念
闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使己经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量。
简单的说:函数+引用环境=闭包
贴士:go 的闭包在某些编程语言中也被称为 闭包(如 Python)
在闭包中可以修改引用的变量:
1 2 3 4 5 6
| str := "hello" foo := func(){ str = "world" } foo() fmt.Print(str)
|
1.2、闭包案例一:简单示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| func fn1(a int) func(i int) int { return func(i int) int { print(&a, a) return a } }
func main() {
f := fn1(1) g := fn1(2) fmt.Println(f(1)) fmt.Println(f(1))
fmt.Println(g(2)) fmt.Println(g(2)) }
|
1.3、闭包案例二:实现累加器
1 2 3 4 5 6 7 8 9 10 11 12
| func Accumulate(value int) func() int { return func() int { value++ return value } }
func main() { accAdd := Accumulate(1) fmt.Println(accAdd()) fmt.Println(accAdd()) }
|