本文摘自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语言采坑:闭包共享变量问题的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Golang导出csv乱码解决方法
Golang如何调试
Go - options模式(函数式选项模式)
Golang 如何结束一个协程
用Go实现进制之前的转化
Golang能否替代php
Golang map为啥不并发
以大见小 - rust快速实践(一)
有没有发现Go 1.17将允许切片转换为数组指针啦?
arts #5
更多相关阅读请进入《Go》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » 分享一个go语言采坑:闭包共享变量问题