本文摘自php中文网,作者藏色散人,侵删。
下面由golang教程栏目给大家分享一个go语言采坑:闭包共享变量问题,希望对需要的朋友有所帮助!
话不多说,直接看代码和注释:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package mainimport (
"fmt"
"time" )func main() {
fmt.Println( "closure buggy example..." )
for i := 1; i <= 5; i++ {
go func() {
fmt.Println(i)
}()
}
time.Sleep(1 * time.Second)
fmt.Println( "normal example..." )
for i := 1; i <= 5; i++ {
go func(i int) {
fmt.Println(i)
}(i)
}
time.Sleep(1 * time.Second)
fmt.Println( "normal example 2..." )
for i := 1; i <= 5; i++ {
i := i
go func() {
fmt.Println(i)
}()
}
time.Sleep(1 * time.Second)}
|
运行得到的结果如下:
1 | closure buggy example...66666normal example...52134normal example 2...52134
|
原因和解决方法见代码注释。第一个例子是错误示例,第二、三个例子是正确示例。
以上就是分享一个go语言采坑:闭包共享变量问题的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
小米滴滴等百家企业因疫情寻求贷款;报告称it人最想学习 Go 和 python;中国手机销量或减少5
Go map定义的几种方式以及修改技巧
我的个人能力发展报告(2015-2019)
聊聊dubbo-Go-proxy的replacepathfilter
ubuntu怎么安装配置Go语言环境
Golang 面向对象编程
当Golang遇到高并发秒杀~
Golang 实现 rsa 的加密解密
Go入门(7)——切片
用Go实现字符串的逆序
更多相关阅读请进入《Go》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » 分享一个go语言采坑:闭包共享变量问题