go语言中如何使用闭包函数
发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,今天就跟大家聊聊有关go语言中如何使用闭包函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、以前用闭包函数都是为了写起来省事,最近试着学学
千家信息网最后更新 2024年11月30日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安全错误
数据库的锁怎样保障安全
服务器传称
腾讯云服务器如何添加端口
求生之路 官方服务器
ktv服务器上没有优盘
银行信息网络安全工作总结
centos代理服务器有哪些
罗克韦尔iis服务器管理工具
数据库查询小数位数怎么设置
计算机应用网络技术方向是什么
联想t2安装plex服务器
东莞微三云软件开发公司简介
传奇服务器不加载地图
诺西卡网络技术
linux 服务器乱码
单基因泛癌分析数据库
网络技术计算机视频教程
中国海关数据库使用说明
衡阳学软件开发怎么样
网络安全对企业财务的影响
网络安全系统保护
网络营销软件开发哪个好
网络安全法内容文档
公司数据库开发软件
网络安全事件全程停电
吉林二人转数据库
计算机三级考试网络技术软件
数据库的存档
网络安全法 哪级人民政府
宝塔分配子域名给其他服务器
给数据库加索引语句