news 2026/5/31 22:38:45

Go 语言闭包(Closure)详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 函数式编程风格的关键
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 22:38:11

基于Matlab模拟海洋病原体传播建模附GUI界面

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; ⛄ 内容介绍 …

作者头像 李华
网站建设 2026/5/31 22:25:07

CE修改器找基址保姆级教程:从动态地址到绿色指针,手把手教你定位稳定内存(附汇编指令分析)

CE修改器找基址实战指南&#xff1a;从动态地址到稳定指针的逆向工程解密在游戏修改和软件调试的世界里&#xff0c;最令人沮丧的莫过于好不容易找到的内存地址&#xff0c;在程序重启后突然失效。这种现象背后是动态内存分配的现代编程机制在作祟——每次运行时&#xff0c;系…

作者头像 李华
网站建设 2026/5/31 22:16:00

RAG检索精度从70%到92%,我只加了这一个组

做RAG的同学&#xff0c;如果你现在只有一步向量检索就直接丢给模型&#xff0c;恭喜你一你的系统还有巨大的提升空间。 今天讲的这个组件叫Cross-Encoder重排序&#xff0c;我的教育知识库项目加上它之后&#xff0c;top-5检索准确率从70%直接提到92% 而且改动量极小一不需要…

作者头像 李华
网站建设 2026/5/31 22:00:20

面向法律合规Agent的Harness规则引擎

从零到一搭建面向法律合规Agent的Harness规则引擎:核心原理、落地实践与行业落地指南 摘要/引言 2023年全年国内监管部门开出的合规罚单总金额超过2000亿元,其中80%的罚单源于企业合规审查漏判、规则更新不及时、审核结果无法溯源等问题。随着大模型技术的普及,越来越多企业…

作者头像 李华