go语言中如何使用闭包函数
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,今天就跟大家聊聊有关go语言中如何使用闭包函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、以前用闭包函数都是为了写起来省事,最近试着学学
千家信息网最后更新 2025年02月23日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安全错误
数据库的锁怎样保障安全
软件开发学历很高就一定厉害吗
网络安全培训考试题目
群体感应淬灭数据库
中关村在线 服务器
战舰世界wgc换服务器
河南能源化工集团网络安全运维
小海鸥网络技术
设备管理服务器软件
揭阳通信软件开发价目表
ibm 服务器 联想
阿里云高读写io服务器
许昌网络技术产品介绍
证券公司网络技术
数据库宿舍管理系统设计报告
浪潮m4服务器不兼容360
数据库中s锁与x锁的区别
我国网络安全相关立法
网上网络安全法考试的目的
遂宁网络技术哪家强
计算机网络技术还要考试吗
网吧推荐哪一款服务器
网络安全舆情培训方案
1500w12v服务器电源
鲁证期货服务器关闭
软件开发的技术部职责
软件开发项目怎么谈
现代软件开发方法有哪些
无线网络安全的ppt课件
浪潮ai服务器是哪家上市公司
在选择软件开发工具之前