您的位置 首页 golang

golang2021函数与包(16)闭包

 

所谓的闭包是指有权访问另一个函数作用域中的变量的函数,就是在一个函数内部创建另一个函数。

在Go语言里,所有的匿名函数(Go语言规范中称之为函数字面量)都是闭包。

根据以上定义,那么上一节定义的匿名函数其实就是闭包。(仔细体会上一节定义的匿名函数)

(也可以这样理解闭包:虽然不能在一个函数里直接声明另一个函数,但是可以在一个函数中声明一个函数类型的变量,此时的函数称为闭包(closure))

 

下面我们通过一个案例,看一下关于闭包的应用。

思考:以下程序执行的结果是:

 

虽然Test( )函数调用了三次,但是输出都是1.原因是:

每次调用Test( )函数,都是重新声明变量x,当函数执行完成后,x会自动被释放所占资源。

如果想实现累加运算,这里就需要用到闭包(匿名函数)。

由于在定义Test( )函数时指定了返回的类型是一个匿名函数,并且该匿名函数返回的类型是整型。

所以在Test( )函数中定义了一个匿名函数,并且将整个匿名函数返回,匿名函数返回的是整型。

在main( )函数中定义了一个变量f,该变量的类型是匿名函数,f( )表示调用执行匿名函数。

最终执行完成后发现,实现了数字的累加。

因为匿名函数(闭包),有一个很重要的特点:

它不关心这些捕获了的变量和常量是否已经超出了作用域,所以只有闭包还在使用它,这些变量就还会存在。

文章来源:智云一二三科技

文章标题:golang2021函数与包(16)闭包

文章地址:https://www.zhihuclub.com/98891.shtml

关于作者: 智云科技

热门文章

网站地图