闭包的实践和分析(go语言基础语法)

本文深入探讨了闭包的概念,指出闭包是函数与引用环境的组合,能够保留对外部变量的引用。注意事项包括闭包对堆内存的影响及闭包对变量的共享行为。闭包的价值在于减少全局变量的使用,实现数据的隐式传递。通过一个具体的例子,展示了如何使用闭包来检查文件名的后缀,强调了闭包在减少参数传递上的优势。
摘要由CSDN通过智能技术生成

1.什么是闭包

闭包是由函数及其相关引用环境组成的实体,一般是通过在匿名函数中引用外部函数的局部变量或者全局变量构成。
我们可以说:闭包=函数+引用环境

2.注意事项

1.闭包对闭包外的环境引入是直接引用的,编译器会自动将闭包引用的外部变量分配到
2.如果函数返回的闭包引用了该函数的局部变量(参数或者内部变量):
(1)多次调用该函数,返回的多个闭包所引用的外部变量是多个副本,原因是每次调用函数都会为局部变量分配内存。
(2)用一个闭包函数多次,如果该闭包修改了其引用的外部变量,则每次调用该闭包对该外部变量都有影响,因为闭包函数共享外部引用。

3.闭包的价值

减少全局变量,在函数调用过程中隐式地传递共享变量。

4.闭包使用示例

(引用自尚硅谷)
请编写一个程序,具体要求如下
1)编写一个函数 makeSuffix(suffix string) 可以接收一个文件后缀名(比如.jpg),并返回一个闭包
2)调用闭包,可以传入一个文件名,如果该文件名没有指定的后缀(比如.jpg) ,则返回 文件名.jpg , 如果已经有.jpg 后缀,则返回原文件名。
3)要求使用闭包的方式完成
4)strings.HasSuffix , 该函数可以判断某个字符串是否有指定的后缀。

在这里插入图片描述

上面代码的总结和说明:
1)返回的匿名函数和 makeSuffix (suffix string) 的 suffix 变量 组合成一个闭包,因为 返回的函数引用到 suffix 这个变量
2)我们体会一下闭包的好处,如果使用传统的方法,也可以轻松实现这个功能,但是传统方法需要每次都传入 后缀名,比如 .jpg ,而闭包因为可以保留上次引用的某个值,所以我们传入一次就可以反复使用。大家可以仔细的体会一把!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是一只土拨鼠呐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值