加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

(十七)golang--闭包(简单明了)

发布时间:2020-12-16 09:17:16 所属栏目:大数据 来源:网络整理
导读:所谓闭包:就是一个函数和其相关的引用环境组合的一个整体; 首先,有如下一个小例子,最终的输出结果是什么呢?是输出11,12吗? ?对上述代码说明: (1)addUpper是一个函数,返回的是func(int) int; (2)func(int) int引用函数外的n,因此这个匿名函数和

所谓闭包:就是一个函数和其相关的引用环境组合的一个整体;

首先,有如下一个小例子,最终的输出结果是什么呢?是输出11,12吗?

?对上述代码说明:
(1)addUpper是一个函数,返回的是func(int) int;

(2)func(int) int引用函数外的n,因此这个匿名函数和n形成了一个闭包;

(3)可以这么理解,闭包是类,函数是操作,n是字段;

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

(5)搞清楚闭包的关键,就是分析出返回的函数和它引用到哪些变量形成闭包;

?

闭包小例子:判断文件名后缀是否是jpg,如果是直接返回文件名,否则给文件加上.jpg

?

?我们使用正常的方法实现小例子:

?

?注意到闭包和正常的区别没?闭包只需要传入一次".jpg"就行了,而正常的则需要每次都需要传入。

则闭包有什么优点呢?

显然就是:

(1)能够读取函数内部的变量;

(2)让变量长期贮存在内存中,不会在调用结束后被垃圾回收机制回收,因为该变量一直被其它函数引用;

缺点额也很明显:内存消耗很大;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读