码迷,mamicode.com
首页 > 其他好文 > 详细

关于golang闭包

时间:2019-12-20 15:12:16      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:漂浮   add   这一   想法   turn   函数返回   结果   程序   定义   

闭包不是必报,睚眦必报,这种事咱不干,咱要干的是程序上所谓的闭包。

在讲闭包之前呢?我们先看一个程序

func add(a, b int) int {

return a + b

}

乍一看,就感觉想骂人,这是啥?这是在考验我的智商?不,咱是那意思嘛,消消气,先听我说,此功能就是两个数相加得到和,但是我们要用它干一票大的!玄机来了,怎么做,我给他传一个数字,等我想用时,我再传入一个数字,和就出来了!

听起来是不是感觉牛x了

好,开始额的表演。。。。。

我们先这样做

func fadd(a, b, int, fn func(int, int)int) int {

return fn(a,b)

}

此函数,能看的懂不?懂的,肯定一万头羊驼在我家草原上奔跑了。。。不懂的我先给你缕缕, 这是叫回调函数,怎么使用呢

func main() {

c := fadd(3, 4, add)

fmt.Println(c)

}

这次幡然醒悟了吧, 毁掉函数就这么简单

现在我们要开始了,别没耐心,不要激动,如果真憋不住的现在去趟厕所,然后回来还来的及。

func ffadd(a int, fn func(int, int)int) func(int)int{

f := func(b int) int {

return fn(a, b)

}

return f

}

先看一分钟,我们就细细品,你品,品。。。。这次函数名也超级牛逼了,多了一个f哈哈。。。不要太在乎细节,村里的姑娘穿的难看,但不一定丑,哈哈。。。要不然说你上学那会,见到你们屯子里的艳红,总是直勾勾流口水。。。

我们给他脱了衣服,一层一层的研究研究。

func ffadd(a int, fn func(int, int)int) func(int) int {

} 这一层像我们刚才说的回调函数,对不,对!香,真香,真tm香。你上道了。哈哈。。。

来我们再看看里面。

f := func(b int) int{

} 这一层,是个啥,是匿名函数, 啥叫匿名函数没名字的函数呗,小时候给班里每一个女生写情书,包括最胖的爱抠鼻屎的冬梅,最后一个没成的最主要的一个原因就是忘记说我是谁?活该,单身一辈子,匿名函数就是这东西,净干好事。

1+1>2的想法,现在是不是在你头顶上漂浮,对两个加起来,开始头疼了。

就差那层窗户纸了,现在我们就捅开他

回调函数就是把里面的匿名函数,返回出来,感觉到了嘛?呼应上了嘛,呼应上了

如果你函数体里面定义的匿名函数当作变量看, 你就彻底懂了,我们试着调用下他,搞一搞才能更清楚嘛!

func main() {

f := ffadd(3, add) // 看准了, 记住了里面返回的是匿名函数 , 那么f的类型就是函数

fmt.Printf("%T", f) //闭包就是返回的函数 返回来,还能接着搞

result := f(8) // 调用里面的函数

fmt.Println(result)//这才是最终的结果

}

最终结束了,感觉没搞清楚的,记住就是把函数里面的函数返回出来,搞完接着搞。。。不断搞的意思。

程序猿的世界,你懂的。。。。。

 

关于golang闭包

标签:漂浮   add   这一   想法   turn   函数返回   结果   程序   定义   

原文地址:https://www.cnblogs.com/jinxinzhang/p/12073099.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!