Golang 闭包

news/2024/11/23 4:07:37/

闭包介绍


基本介绍:闭包就是一个函数和与其相关的引用环境组合的一个整体(实体)

闭包本质上返回的是一个函数,但是函数会用到函数外面的一些变量,然后他们组成了一个共同的整体,这个整体我们称之为闭包。

func AddUpper() func(int) int {var n int = 10return func(i int) int {n += ireturn n}
}func main() {f := AddUpper()fmt.Println(reflect.TypeOf(f))fmt.Println(f(1))fmt.Println(f(2))fmt.Println(f(3))
}func(int) int
11
13
16

1)AddUpper 是一个函数,返回的数据类型是 fun(int)int

2)闭包的说明

这块代码形成闭包,返回的是匿名函数,但是这个匿名函数引用到函数外的n,因此这个匿名函数就和n形成一个整体,构成了闭包。

	var n int = 10return func(i int) int {n += ireturn n}

3)可以这样理解:闭包是类,函数是操作,n是字段。函数和它使用到n构成闭包。

4)当我们反复的调用f函数时,因为n是初始化一次,因此每调用一次就进行累计。

5)要搞清楚闭包的关键,就是要分析出返回的函数它使用(引用)到哪些变量,因为函数和它引用到的变量共同构成闭包。

闭包的本质就是返回的函数和引用的类型构成了整体,它引用到的这个变量不会每次初始化,而是不断的累加,也就是每次变量都是会发生变化的。

闭包


闭包的最佳实践

请编写一个程序,具体要求如下:

1)编写一个函数 makeSuffix(suffix string)可以接收一个文件后缀名(比如.jpg),并返

回一个闭包。

2)调用闭包,可以传入一个文件名,如果该文件名没有指定的后缀(比如.jpg),则返

回文件名.jpg,如果已经有.jpg后缀,则返回原文件名。

3)要求使用闭包的方式完成

4)strings.HasSuffix 该函数可以判断某个字符串是否有指定的后缀

package mainimport ("fmt""strings"
)func makeSuffix(suffix string) func(string) string {return func(filename string) string {if strings.HasSuffix(filename, suffix) == true {return filename}return filename + suffix}
}func main() {a := makeSuffix(".jpg")f := a("test")fmt.Println(f)
}

里面的函数 return func(filename string) string使用到外面的函数makeSuffix变量,这个变量是函数外面的一个变量,因此这个返回的匿名函数和外面的suffix构成了一个闭包,外面函数的变量只需要传入一次,然后返回的函数可以无限使用外面的变量值。

代码说明:

1)返回的屋名函数和 makeSuffix(suffix string)的 suffix变量 组合成一个闭包,因为 返回的函数引用到suffix这个变量

2)  我们体会一下闭包的好处,如果使用传统的方法,也可以轻松实现这个功能,但是传统方法需要每次都传入后缀名,比如.jpg,而闭包因为可以保留上次引用的某个值,所以我们传入一次就可以反复使用。大家可以仔细的体会一把!(最大的好处就是将匿名函数引用到的变量保留下来,在下一次调用的时候接着使用,函数是不行的,调用一次它的栈就销毁了,它原先的变量就没有了,除非你有全局变量,但是闭包不使用全局变量也可以搞定这件事)


http://www.ppmy.cn/news/473601.html

相关文章

软件装机指南

小白必备电脑软件: 小鸟壁纸、鲁大师、鲁大师温度监控、360浏览器、360游戏大厅、安全组件-2345、2345浏览器、手机模拟大师、PDF转换器、海螺桌面、虎牙直播、极速输入法、易极数据恢复、讯读PDF转换器、香蕉阅读、飞压、、云上压缩、即刻玩游戏盒、万能压缩、快压…

重装系统后,没有以太网和WLAN怎么办

重装系统中,在小娜为你配备网络卡住了, 点击跳过以后,发现任务栏右下方网络红叉。 驱动精灵万能网卡版和装机版也不能拯救无法连接网络。原因是没有安装网卡。 快速解决方法:(8个小时的抠索😭) …

固态硬盘启动蓝屏解决方法

在操作电脑的过程中经常遇到的就是蓝屏问题,比如固态硬盘启动蓝屏,遇到这种情况要如何解决呢?还有很多用户不知道怎么办,下面小编就分享一下详细的解决办法。 win7装机版系统下载_萝卜家园 Ghost Win7 64位 万能装机版下载V2022.…

u盘启动怎么修复计算机,计算机黑屏怎么办 如何使用u盘启动制作系统

计算机黑屏如何使用u盘启动制作?随着社会的发展,电脑已经成为我们在日常工作、生活中不可或缺的工具。但用久了难免计算机黑屏,遇到这个问题该如何处理呢?下面介绍一下电脑开机黑屏的解决方法和u盘启动制作教程,一起来…

通过u盘启动计算机使用ghost安装系统步骤,如何用u盘装ghost win7系统步骤

如何用u盘装ghost win7系统步骤以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如何用u盘装ghost win7系统步骤 下载大白菜,老毛桃等等制作U盘启动盘的工具把U盘做成启动盘&…

万能Ghost系统制作教程(转)

万能Ghost系统制作教程 本篇是制作万能Ghost系统最的基础教程。制作出来的万能Ghost系统镜像文件,可以恢复到绝大多数的计算机上使用,对于经常装机的朋友,可以给自己带来极大的方便。 一、准备工作 1、准备所需工具软件 ※ S&R&S_V9.…

[精品教程,新老鸟必读]:极限装机、优化全攻略(新手优化教程)

[精品教程,新老鸟必读]:极限装机、优化全攻略(新手优化教程) 对于一些新手们来说,如何装机和对电脑进行优化是一件头疼的事。现在网站上也有很多相关的教程,但基本上都是以理论为主,经常把菜鸟们搞…

Win10纯净版和官方原版哪个好?

大家都知道Win10总共有四个版本分别为专业版、家庭版、企业版、教育版,有用户就在犹豫要安装Win10纯净版还是Win11官方版,这两个版本有什么区别吗?下面就来看看小编整理的介绍吧。 ​ 纯净版:初始化安装之后,Win10系统…