文档章节

go匿名函数闭包引用外部变量注意

吾爱
 吾爱
发布于 2017/06/06 10:28
字数 200
阅读 537
收藏 0
Go

因为自身对js还算熟悉,js里闭包变量引用的问题不用赘述了,当在go语言中遇到类似的场景时,出于谨慎,测试了一下,果然跟js行为差不多,匿名函数中使用外部变量,尤其是在for循环+匿名函数创建 goroutine时尤其注意。

错误用法:

for i:=0;i<10;i++ {
		go func(){
			time.Sleep(time.Second)
			fmt.Println(i)
		}
	}

错误输出结果都是 10

正确用法:

for i:=0;i<10;i++ {
		go func(i int){
			time.Sleep(time.Second)
			fmt.Println(i)
		}(i)
	}

这样子,虽然匿名函数是异步执行的,但是 i 是立即求值的,所以每个goroutine输出的i都不一样。

同样适用于 defer 语句,如 defer func(i int){ fmt.Println(i) }(i)

© 著作权归作者所有

吾爱
粉丝 142
博文 272
码字总数 91680
作品 0
后端工程师
私信 提问
加载中

评论(0)

StackOverflow 上那些 JavaScript 的高赞问题

问不出好问题,又想看到好答案。怎么办,只好做个答案的搬运工。以下问题来自于 StackOverflow 中 JavaScript 话题下的高票回答。我们来一睹为快。 1.如何移除数组中的特殊元素? 答(1) 111...

toddmark
01/14
0
0
重学JavaScript之匿名函数

注意: 本文章为 《重学js之JavaScript高级程序设计》系列第七章。 关于《重学js之JavaScript高级程序设计》是重新回顾js基础的学习。 欢迎关注 前端公众号【小夭同学】 1. 什么是匿名函数?...

故事胶片
2019/10/25
0
0
php匿名函数的概念

一.匿名函数和闭包的概念 1.1匿名函数 匿名函数在编程语言中出现的比较早,最早出现在Lisp语言中,随后很多的编程语言都开始有这个功能了, 目前使用比较广泛的Javascript以及C#,。 什么是匿...

金于虎
2016/12/23
4
0
PHP闭包(Closure)初探

不知不觉发现PHP已经出到了5.5版本,而自己一直在用PHP5.2,让我看起来像深山出来的小伙子一样,又土又落后。在我习惯在javascript中使用闭包之后,忽然间对PHP的闭包打起了兴趣。 于是乎在网...

豆浆Melon
2013/04/30
1.6W
17
JavaScript中闭包的写法和作用详解

1、什么是闭包 闭包是有权访问另一个函数作用域的变量的函数。 简单的说,Javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所...

黄志鹏_博客
2018/04/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

展示如何在checkout里使用quote,quote item, address, shopping cart

展示如何更改并且在定制化的时候高效应用这些模块。 以下实体继承 \Magento\Framework\Model\AbstractExtensibleModel ,所以你可以使用第4章中讨论的可扩展属性。 Quote Quotes 是客户购物车...

忙碌的小蜜蜂
17分钟前
8
0
面向对象思想设计原则及常见设计模式

1、面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设计原则 1.1、单一职责原则 高内聚,低耦合 每个类应该只有一个职责,...

庭前云落
26分钟前
25
0
fastadmin对接支付宝支付,遇到的问题之一二

一开始也没做过支付宝支付相关的东西 本来用的fastadmin的epay插件来配置支付宝的,本来以为会so easy,但是实际上还是遇到了一些问题,花了几天时间,把沙箱环境配置起来了... 算是一个良好的开...

老bia同学
27分钟前
5
0
记录一题生产者消费者问题

//有一个容器,能存储一定的产品,有put和get方法,有两个生产者,8个消费者的线程阻塞 import java.util.LinkedList; import java.util.concurrent.TimeUnit; public class Test3<T> { Lin...

南桥北木
37分钟前
13
0
线程池源码解读——回归基础

线程池源码解读——回归基础 线程池源码解读——回归基础 线程池的好处: JDK提供的创建线程池: java 中创建线程的方式: 线程池源码解读: 记录的知识点: 线程池的好处: 降低资源的开销 ...

lihua20103181
39分钟前
86
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部