关于golang闭包所谓的“坑”
2017-03-16 11:08
155 查看
昨天听了某企业架构师关于golang的经验分享,听到架构师吐槽golang里的闭包是个大坑,对此有点不同看法。
先贴上一段关于闭包的定义:
闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。
对于没有闭包概念的语言从业者来说,可能会觉得闭包是个坑,但对于了解闭包的程序员来说,这就是闭包的性质而已,没有什么值得大肆吐槽的。在go语言中提供了对闭包的支持,从个人经验来看,闭包在有些场景下还是很有用的。
下面提供一个小例子,说明下闭包在go中的使用。
第一个例子:由于闭包对变量的使用特性,导致不管执行多少次循环,闭包获取的总数最后一次循环后变量i的值3。
第二个例子:如果想获取期望的变量值,只要将变量i作为匿名函数的参数传入,即可。
当然,为了看得更清楚,可以修改下传参的名称(如下图)。
先贴上一段关于闭包的定义:
闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。
对于没有闭包概念的语言从业者来说,可能会觉得闭包是个坑,但对于了解闭包的程序员来说,这就是闭包的性质而已,没有什么值得大肆吐槽的。在go语言中提供了对闭包的支持,从个人经验来看,闭包在有些场景下还是很有用的。
下面提供一个小例子,说明下闭包在go中的使用。
第一个例子:由于闭包对变量的使用特性,导致不管执行多少次循环,闭包获取的总数最后一次循环后变量i的值3。
第二个例子:如果想获取期望的变量值,只要将变量i作为匿名函数的参数传入,即可。
当然,为了看得更清楚,可以修改下传参的名称(如下图)。
相关文章推荐
- 关于LiPS release的所谓标准:Linux电话终端标准1.0 的批判
- 关于javascript中parseInt函数的一个所谓的bug
- 关于闭包
- 关于stl所谓的强化概念和继承的区别杂谈
- JavaScript 关于闭包的思考 总结
- 举例说明关于 Lua闭包 的存在价值
- 关于C#闭包
- 关于图片中的位之二 所谓的位
- 关于ruby和GT,个人感觉ruby是GT的翻版,看不出所谓的精简优势。同时感觉ruby和GT代码编写过程很缺乏逻辑性。
- 关于javascript中parseInt函数的一个所谓的bug
- 关于闭包
- 关于5944空间的所谓免费
- 关于闭包
- Groovy学习笔记之关于闭包的一些补充
- 关于建立自己的网上留言板(也就是所谓的博客)
- 关于.NET中所谓“异步刷新”问题的讨论
- 关于那个所谓的腾讯笔试题的研究
- 关于JAVASCRIPT中的闭包(Closure)!
- 关于闭包
- 精辟,关于所谓“安全控件”