七叶笔记 » golang编程 » golang2021函数与包(17)匿名函数与闭包

golang2021函数与包(17)匿名函数与闭包

Go 支持匿名函数,匿名函数就是没有名字的函数,如果我们某个函数只是希望使用一次,可以考 虑使用匿名函数,匿名函数也可以实现多次调用。

 

 

 

匿名函数使用方式 1

在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次。 【案例演示】

 

 

        匿名函数使用方式 2

将匿名函数赋给一个变量(函数变量),再通过该变量来调用匿名函数 【案例演示】

 

        全局匿名函数

如果将匿名函数赋给一个全局变量,那么这个匿名函数,就成为一个全局匿名函数,可以在程序 有效。

 

        介绍

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

        案例演示:

 

Ø        对上面代码的说明和总结

1) AddUpper  是一个函数,返回的数据类型是 fun (int) int 2) 闭包的说明

 

 

 

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

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

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

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

6) 对上面代码的一个修改,加深对闭包的理解

 

 

 

6.18.3        闭包的最佳实践

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

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

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

 

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

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

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

 

 

 

Ø 上面代码的总结和说明:

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

2) 我们体会一下闭包的好处,如果使用传统的方法,也可以轻松实现这个功能,但是传统方法需要每 次都传入 后缀名,比如 .jpg ,而闭包因为可以保留上次引用的某个值,所以我们传入一次就可以反复 使用。大家可以仔细的体会一把!

相关文章