21、闭包
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 返回内存函数
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!