1.闭包的概念
Go语言中支持将一个函数作为另一个函数的返回值,这样就形成了闭包的结构
闭包(closure)
一个外层函数中,有内层函数,该内层函数中,会操作外层函数的局部变量(外层函数中的参数或者外层函数中直接定义的变量),并且该外层函数的返回值就是这个内层函数
这个内层函数和外城函数的局部变量,统称为闭包
- 局部变量的生命周期会发生变化,正常的局部变量随着函数的调用而创建,随着函数的结束而销毁
- 但是闭包结构中的外层函数的局部变量并不会随着外层函数的结束而销毁,因为内层函数还要继续使用
/**
* @author ly (个人博客:https://www.cnblogs.com/qbbit)
* @date 2023/5/15 21:42
* @tags 喜欢就去努力的争取
*/
package main
import "fmt"
func main() {
// 调用函数
fun1 := increment()
fmt.Printf("%T\n", fun1)
res := fun1()
fmt.Printf("%T\n", res)
fmt.Println(res)
res2 := fun1()
fmt.Println(res2)
res3 := fun1()
fmt.Println(res3)
fun2 := increment()
fmt.Println(fun2())
fmt.Println(fun2())
fmt.Println(fun2())
}
func increment() func() int { // 外层函数
i := 0
return func() int { // 内层函数
i++
fmt.Println("i:", i)
return i
}
// return 返回内存函数
}
标签:闭包,外层,fun1,21,fmt,Println,函数
From: https://www.cnblogs.com/qbbit/p/17403330.html