当前位置: 首页 > 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.gsyq.cn/news/1436830.html

相关文章:

  • 淘宝网店运营服务商排行:知名三家机构实力解析 - 速递信息
  • PnP-UnNull v3 模型详解
  • 清世祖 福临
  • 终极指南:如何用ExplorerPatcher恢复Windows经典界面并提升工作效率
  • 清单来了:盘点2026年风靡全网的的降AIGC工具 - 降AI小能手
  • 掘金量化终端3.0实战:除了跑策略,它的‘量化研究’模块还能帮你做什么?
  • Python测试自动化与CI/CD集成
  • 淘宝网店运营服务商:多家机构核心能力优势 - 速递信息
  • 2026年制造业AI赋能优选服务商盘点:为何说“人才转型”比“工具迭代”更关键? - 速递信息
  • 【Gemini社媒运营黄金窗口期】:错过这5个平台API接入节点,将落后竞品90天
  • 国内高校学生高频使用的AI写作辅助网站有哪些?
  • 单链表超详细精讲|带头节点带头指针双实现 + 核心备份思想 + 完整可运行c语言源码 - Fa-Mian
  • 2026 西安高端酒水上门回收无套路正规实体门店口碑榜单 - 速递信息
  • 抖音下载器终极指南:从零开始掌握批量下载的完整方案
  • 产业转移新版图:中西部10座城市正在接走哪类东部工厂
  • 2026 西安高端酒水回收哪家靠谱 同城高价无套路门店人气榜单 - 速递信息
  • 2026年泉州装修/旧房翻新领域优选服务商深度分析报告 - 速递信息
  • 南京黄金回收商家实力榜 5.31大盘价 + 11 区上门实测,靠谱首选 - 速递信息
  • 为什么你的Gemini微调总失败?92%工程师踩中的4个训练数据陷阱(附可复用清洗脚本)
  • 自动驾驶毫米波雷达中的CFAR:如何用MATLAB/Simulink搭建目标检测模型?
  • 2人新疆旅游旅行社排行 纯玩定制服务实测对比 - 互联网科技品牌测评
  • Gemini股东大会材料终极对照表:对比GPT-5闭门会议纪要、Claude 4路线图,锁定2024唯一可落地的AI集成窗口期
  • 【独家首发】Google内部泄露的Gemini 2.0能力边界白皮书(含未公开基准测试数据)
  • 2026 西安高端老酒高价回收 陈年茅台名酒正规机构排名 - 速递信息
  • RAG 与知识图谱在根因分析中的协同
  • Go语言测试与质量保障
  • 【Gemini应用更新日志深度解码】:20年AI平台运维专家亲授5大被忽略的兼容性雷区及迁移避坑清单
  • 基于Arduino与PID控制的智能平衡系统设计与实现
  • Go语言构建与部署最佳实践
  • Gemini会员活动效果归因困局:用因果森林模型替代UTM,精准定位高价值动作链(附Python可执行代码包)