go语言中如何使用闭包函数
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,今天就跟大家聊聊有关go语言中如何使用闭包函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、以前用闭包函数都是为了写起来省事,最近试着学学
千家信息网最后更新 2025年01月22日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安全错误
数据库的锁怎样保障安全
云服务器配置pi节点
mbd软件开发是什么
日本软件开发 设计书
传奇sf服务器怎么样
oppo手机服务器介绍
和服务器一样的机箱
内江网络技术质量
2003 终端服务器
重庆师范大学图书馆数据库资源
服务器查数据库实例
国产串口设备服务器报价
杨浦区网络技术转让市价
数据库n元关系什么意思
国外 网络安全大学
我的世界服务器在线图片插件
河南网络安全审计硬件制造商
法人信息基础数据库
保护好自己的网络安全
网络安全等级保护实施资质
检测实验室管理系统软件开发
数据库文献检索有什么特点
长沙哪里可以维修服务器
曲靖哪有软件开发定制
大学安全教育网络安全答案
服务器安装optifine
ns代理服务器如何打开
注册上海软件开发公司
计算机网络技术所课程
网络安全gns
金山区品质数据库服务商报价行情