千家信息网

go语言中如何使用闭包函数

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,今天就跟大家聊聊有关go语言中如何使用闭包函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、以前用闭包函数都是为了写起来省事,最近试着学学
千家信息网最后更新 2025年12月01日go语言中如何使用闭包函数

今天就跟大家聊聊有关go语言中如何使用闭包函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、以前用闭包函数都是为了写起来省事,最近试着学学go,发现go里面的闭包函数挺怪,例如下面的代码:

package mainimport "fmt"func main() {    var list []func() int    for i := 0; i < 3; i++ {        list = append(list, func() int {            return i        })    }    for _, fun := range list {        fmt.Printf("%v", fun())    }}

感觉好像应该输出 0 1 2 ,而实际上会输出 3 3 3 。

我是这样理解的:

1、在添加函数切片的for循环中,只是添加了函数,但函数并未执行,若执行,需要在函数后加(),同时函数编译到内存中的空间是固定的,所以函数的地址应该也是固定的,也就是说是同一个函数。

2、i变量虽然是在for中的,但是由于匿名函数也在for中,所以匿名函数是可以使用i变量的,实际测试,函数中i变量的地址也确实是for循环中i变量的地址。

3、第一个for循环退出之前,是运行了3次i++,所以最后i变量的值是3。

4、第二个for循环运行函数,函数中的i变量是3,自然输出3。

匿名函数确实有点绕。

二、go简易教程中的一个例子说明

package mainimport "fmt"func getSequence() func() int {   i:=0   return func() int {      i+=1     return i     }}func main(){   /* nextNumber 为一个函数,函数 i 为 0 */   nextNumber := getSequence()     /* 调用 nextNumber 函数,i 变量自增 1 并返回 */   fmt.Println(nextNumber())   fmt.Println(nextNumber())   fmt.Println(nextNumber())      /* 创建新的函数 nextNumber1,并查看结果 */   nextNumber1 := getSequence()     fmt.Println(nextNumber1())   fmt.Println(nextNumber1())}

我的理解,函数getSequence的返回值是匿名函数func() int,i:=0 是属于getSequence 函数的变量,所以当nextNumber := getSequence() 后,这个这是就归属于nextNumber,而nextNumber()运行的是getSequence的匿名函数func() int,所以i变量的值在nextNumber里是一直保留着的,会随着匿名函数运行一次加1。

看完上述内容,你们对go语言中如何使用闭包函数有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

函数 变量 闭包 循环 运行 内容 地址 输出 语言 实际 省事 也就是 代码 例子 内存 只是 同时 实际上 感觉 教程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市千途网络技术有限公司 软件开发工作量计算人月数 泰州idc服务器技术指导 单招哪个学校有软件开发专业 弱电系统软件开发书籍 关于网络安全有关政策 安全服务器无法连接更新源 数据库中查看线程安全 数据库连接池技术的优点 软件开发应届生英语自我介绍 信息系统必须有数据库么 阿里云 服务器 租用 小狐狸图标的数据库 战地5服务器会关闭吗 逆战切枪加速服务器 嘉定区市场软件开发好处 云安定制软件开发 hp服务器内存价格 江苏家用软件开发预算 找到数据库的图片 网络安全实施办法 党委 电子科技大学软件开发好吗 计算机网络技术士官工作 win8网络安全密钥从哪来 全境封锁香港服务器 小牛哥整家互联网科技财务会计 如皋正规网络技术诚信经营 数据库二级考试基础知识 广州优财互联网科技怎么样 忻州市国家网络安全宣传周活动
0