当前位置: 首页 > news >正文

Go 语言闭包(Closure)详解

闭包是 Go 中非常重要的概念,允许函数访问和操作其外部作用域的变量。理解闭包对于实现回调、累加器、工厂函数等场景非常有用。


一、闭包的概念

闭包是一个函数,它可以捕获并使用定义在其外部作用域的变量,即使外部函数已经返回,这些变量依然存在于内存中。

简单理解:

闭包 = 函数 + 它捕获的外部变量

二、基本示例

packagemainimport"fmt"funcmain(){add:=func(a,bint)int{returna+b}fmt.Println(add(3,5))// 8}

这是最基本的函数,也可以看作闭包,但没有捕获外部变量。


三、闭包捕获外部变量

packagemainimport"fmt"funcadder()func(int)int{sum:=0returnfunc(xint)int{sum+=xreturnsum}}funcmain(){f:=adder()fmt.Println(f(1))// 1fmt.Println(f(2))// 3fmt.Println(f(3))// 6}

说明:

  1. adder返回一个函数
  2. 返回的函数可以访问adder内部的sum
  3. 每次调用返回函数,sum都会累加,闭包保存了sum的状态

四、闭包注意事项

  1. 捕获变量是引用
funcmain(){funcs:=[]func(){}fori:=0;i<3;i++{funcs=append(funcs,func(){fmt.Println(i)})}for_,f:=rangefuncs{f()// 输出 3 3 3,而不是 0 1 2}}

原因:

  • 闭包捕获的是i的地址,循环结束后i = 3,所以每个闭包都打印 3。

解决办法:

fori:=0;i<3;i++{x:=i funcs=append(funcs,func(){fmt.Println(x)})}

输出:

0 1 2

  1. 闭包可以作为回调函数
funccallback(ffunc(int)int){fmt.Println(f(10))}funcmain(){y:=5callback(func(xint)int{returnx+y})// 输出 15}

闭包可以捕获外部变量y


  1. 闭包的应用场景
  • 累加器(上例)
  • 工厂函数(生成自定义函数)
  • 回调函数
  • 延迟执行或装饰器模式

五、闭包总结

  1. 闭包 = 函数 + 捕获的外部变量
  2. 捕获的变量在闭包内是引用,修改会影响外部变量
  3. 循环中使用闭包需注意变量捕获问题
  4. Go 中闭包常用于累加器、回调和函数工厂
  5. 理解闭包是深入掌握 Go 函数式编程风格的关键
http://www.jsqmd.com/news/925498/

相关文章:

  • 淘宝网店运营服务商排行:知名三家机构实力解析 - 速递信息
  • 2026苏州防水哪家好 本地正规补漏公司口碑排名避坑指南 - 吉修匠
  • 2026年全国制造业AI应用实战服务商优选榜单与采购推荐指南 - 速递信息
  • Python集成测试:验证系统协同工作
  • ESP32显示驱动终极指南:打造高效嵌入式图形界面
  • Go 语言匿名函数详解
  • PPT怎么转PDF?2026年手把手教你(小程序/PowerPoint/WPS/在线工具完整方案)
  • 终极炉石传说插件:HsMod完整功能指南与安装教程
  • 不止于收发:挖掘ZCANPRO的UDS诊断与自动化测试潜力,提升车载测试效率
  • PnP-UnNull v3 模型详解
  • 2026苏州防水补漏公司TOP榜|屋面卫生间渗漏修缮靠谱推荐 - 吉修匠
  • Python端到端测试:模拟真实用户场景
  • 从PBMC数据实战出发:手把手教你用Scanpy完成单细胞测序标准分析流程(附代码避坑点)
  • 清世祖 福临
  • 终极指南:如何用ExplorerPatcher恢复Windows经典界面并提升工作效率
  • 2026 AI企业应用培训优选指南(财务/人力/生产/营销型) - 速递信息
  • Python测试模式:构建高效测试体系
  • 保姆级教程:在Windows/Linux双环境下配置与验证Tasking for TriCore许可证
  • 清单来了:盘点2026年风靡全网的的降AIGC工具 - 降AI小能手
  • 掘金量化终端3.0实战:除了跑策略,它的‘量化研究’模块还能帮你做什么?
  • 5.31
  • Agent 架构设计与能力构建
  • 清圣祖 玄烨
  • Python测试自动化与CI/CD集成
  • 2026制造业AI应用培训优选指南:人才孵化组织赋能政务落地 - 速递信息
  • 别再手画UML了!用StartUML 6.0给C++项目画类图,保姆级避坑指南
  • 2026南京漏水维修攻略,卫生间、阳台、外墙、屋顶、地下室漏水,靠谱防水门店推荐 - 吉修匠
  • 构建具备常识推理能力的 AI Agent Harness Engineering
  • 遂宁黄金回收商家推荐榜单5.31今日大盘价 + 靠谱门店实测,价高无套路 - 速递信息
  • 2026年4月可靠的石灰岩门店推荐,人造石/超薄石材/仿古砖/文化石/岩板/花岗石/软石/PC砖,石灰岩供应商口碑推荐 - 品牌推荐师