概念
闭包是一个函数值,引用了函数体之外的变量;简而言之,函数体绑定在变量之上,有些类似c++局部static
作用和意义
缩小变量作用域,减少对全局变量的污染;利用背包可以实现有自身状态的函数。
延迟实现一部分程序逻辑或功能,但实际上,是在动态地生成那部分程序逻辑。与 GoF 设计模式中的“模板方法”模式有着异曲同工之妙
代码
package main
import (
"fmt"
)
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
func main() {
myAdder := adder()
// 从1加到10
for i := 1; i <= 10; i++ {
myAdder(i)
}
fmt.Println(myAdder(0))
// 再加上45
fmt.Println(myAdder(45))
}
运行结果
55 // 1+...+10
100