【go】闭包
闭包的概念
闭包是很多语言中都有的一个概念。一般来说,函数的变量作用域最好跟函数作用域一样。但是某些时候,可能会发生,内部函数要访问外部函数中的变量。
这个时候就产生了闭包。
package main
import "fmt"
// 定义了函数adder,返回类型是一个函数
func adder() func(int) int {
sum := 0
// 这个匿名函数中引用了外部函数adder的变量,所以,这个匿名函数是一个闭包
return func(x int) int {
sum += x
return sum
}
}
func main() {
pos, neg := adder(), adder()
for i := 0; i < 10; i++ {
fmt.Println(
pos(i),
neg(-2*i),
)
}
}
2 闭包的作用
- 访问外部函数的变量
- 做函数工厂,可以动态产生多种函数,比如上面的例子中,在
main
函数中,用两个变量pos,neg命名了那个匿名函数,调用的时候分别使用pos(i),neg(-2*i)
于是就产生了两个不同的函数