关于golang闭包

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

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

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)//这才是最终的结果

}

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

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

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

时间: 2024-11-09 03:48:53

关于golang闭包的相关文章

golang 闭包

说起golang闭包,在官方手册里面看过一次,没怎么用过,还是因为6哥经常用,阅读他的代码好多闭包,emmm,今天就学习一下. 在过去近十年时间里,面向对象编程大行其道,以至于在大学的教育里,老师也只会教给我们两种编程模型,面向过程和面向对象.孰不知,在面向对象思想产生之前,函数式编程已经有了数十年的历史.就让我们回顾这个古老又现代的编程模型,看看究竟是什么魔力将这个概念在21世纪的今天再次拉入我们的视野 闭包是函数式编程语言中的概念,没有研究过函数式语言的人可能很难理解闭包的强大(我就是其中一

【GoLang】golang 闭包 closure 参数传递的蹊跷!

结论: 闭包函数可以直接引用外层代码定义的变量, 但是,注意,闭包函数里面引用的是变量的地址, 当goroutine被调度时,改地址的值才会被传递给goroutine 函数. 介绍 go的闭包是一个很有用的东西.但是如果你不了解闭包是如何工作的,那么他也会给你带来一堆的bug.这里我会拿出Go In Action这本书的一部分代码,来说一说在使用闭包的时候可能遇到的坑.全部的代码在github上. 闭包的坑 首先看一段代码: search/search.go 29 // Launch a gor

golang闭包里的坑

介绍 go的闭包是一个很有用的东西.但是如果你不了解闭包是如何工作的,那么他也会给你带来一堆的bug.这里我会拿出Go In Action这本书的一部分代码,来说一说在使用闭包的时候可能遇到的坑.全部的代码在github上. 闭包的坑 首先看一段代码: search/search.go 29 // Launch a goroutine for each feed to find the results. 30 for _, feed := range feeds { 31 // Retrieve

golang闭包

闭包:一个函数和与其相关的引用环境组合而成的实体 先看下面的这个例子: package main import "fmt" func adder() func(int) int {      sum := 0      return func(x int) int {           sum += x           return sum      } } func main() {      pos, neg := adder(), adder()      for i :=

第一章.java&golang的区别之:闭包

对于golang一直存有觊觎之心,但一直苦于没有下定决心去学习研究,最近开始接触golang.就我个人来说,学习golang的原动力是因为想要站在java语言之外来审视java和其它语言的区别,再就是想瞻仰一下如此NB的语言.年前就想在2019年做一件事情,希望能从各个细节处做一次java和golang的对比分析,不评判语言的优劣,只想用简单的语言和可以随时执行的代码来表达出两者的区别和底层涉及到的原理.今天是情人节,馒头妈妈在加班,送给自己一件贴心的礼物,写下第一篇对比文章:java&gola

Golang泛型函数

目前,golang还不支持模板函数(类型参数化),所以看上去不得不为每一种类型都实现一个函数.但是Golang可以利用空接口interface{}和闭包/高阶函数来实现泛型函数. 1 空接口 空接口interface{}是指方法集为空的接口,任何类型的值都可以赋值给空接口.接口相关内容请参见另一篇博客<Golang中的接口> // interface{} func minimum(first interface{}, rest ...interface{}) interface{} {    

Golang-函数式编程(闭包)

github:https://github.com/ZhangzheBJUT/blog/blob/master/closure.md 一 函数式编程概论 在过去近十年时间里,面向对象编程大行其道,以至于在大学的教育里,老师也只会教给我们两种编程模型,面向过程和面向对象.孰不知,在面向对象思想产生之前,函数式编程已经有了数十年的历史.就让我们回顾这个古老又现代的编程模型,看看究竟是什么魔力将这个概念在21世纪的今天再次拉入我们的视野. 随着硬件性能的提升以及编译技术和虚拟机技术的改进,一些曾被性能

Golang 中关于闭包的坑

所谓闭包是指内层函数引用了外层函数中的变量或称为引用了自由变量的函数,其返回值也是一个函数,了解过的语言中有闭包概念的像 js,python,golang 都类似这样. python 中的闭包可以嵌套函数,像下面这样: def make_adder(addend): def adder(augend): return augend + addend return adder 转化成 golang 代码则像下面这样: func outer(x int) func(int) int{ func in

golang 函数二 (匿名函数和闭包)

匿名函数就是没有定义函数名称的函数.我们可以在函数内部定义匿名函数,也叫函数嵌套. 匿名函数可以直接被调用,也可以赋值给变量.作为参数或返回值.比如: func main(){     func(s string){     //直接被调用         println(s)     }("hello gopher!!!")     /*     func(s string){     //未被调用         println(s)     }     */ } func mai