闭包
闭包是一个函数
函数引用 他自己之外的变量就是闭包。
闭包的根本就是
1, 函数可以作为参数或者返回值
2, 理解变量的作用域
最简单的闭包:
package main
//函数返回引用了外部变量 i 的闭包
func a(i int) func () {
return func() {
fmt.Println(i)
}
}
func main() {
f := a (1)
f ()
}
实例:
package main
import "fmt"
// 没有参数 没有返回值
func f() {
fmt.Println("hello f")
}
// 没有参数的函数作为参数, 没有返回值
func f1(f func()) {
fmt.Println("hello f1")
f()
}
// int int 作为参数,没有返回值
// 此时 f2 不能作为参数传入 f1
func f2(x, y int) {
fmt.Println("hello f2 and x + y = ", x+y)
}
// 闭包,x, y 属于 f3, 但是可以给 f使用,返回没有参数和返回值的函数类型
func f3(f func(int, int), x, y int) func() {
return func() {
f(x, y)
}
}
func main() {
f1(f)
// hello f1
// hello f
retFunc := f3(f2, 1, 2)
f1(retFunc)
//hello f1
//hello f2 and x + y = 3
}