Go并发陷阱之i的到底等于几?
今天写bug时碰到一个Go并发陷阱,是一道很经典的面试题,那就是:
func main() {
for i := 0; i < 5; i++ {
go func() {
fmt.Println("current value: ", i)
}()
}
time.Sleep(time.Second)
}
这段代码看起来会顺序输出0-4,但是其实打印出来的结果却是:
当然结果也不一定就是图片的结果,为什么会这样?
因为此时协程中读取的i和main中循环的i是相同的地址空间,这就有可能
原创
2022-03-28 23:13:58 ·
282 阅读 ·
0 评论