go语言中如何使用闭包函数
发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,今天就跟大家聊聊有关go语言中如何使用闭包函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、以前用闭包函数都是为了写起来省事,最近试着学学
千家信息网最后更新 2024年11月27日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安全错误
数据库的锁怎样保障安全
靖江个性化网络技术批发价
数据库支持第一类丢失
韶关软件开发公司
数据库drain
wow官方数据库
网络安全台账模板
魔兽服务器奎尔塞拉
手机如何建服务器
学校开展网络安全宣传的新闻稿
文摘型西文数据库
数据库中一门课程的属性都有什么
数据库物理存储结构主要指
服务器管理相关方案
服务器 温度灯
RNA加工因子数据库
文档名称重复数据库
网络安全法颁布先后顺序
mysql数据库实例问题
无线网络安全演讲稿PPT
网络安全周记800字
常见的EST数据库
新疆网络安全工程师
和平精英服务器不开放什么意思
关于数据库日期函数
密云中国数据库技术大会
湖北软件开发报价
数据库中一门课程的属性都有什么
阿里云服务器安全防护
湖北品质软件开发服务价格优惠
点击web页面按钮查询数据库