我有一个非常简单的go代码,如下所示:
var wg sync.WaitGroup
func main() {
for i := 0; i < 100; i++ {
wg.Add(1)
go func(i int) {
fmt.Printf("No %d goroutine begin\n", i)
fmt.Printf("No %d goroutine is done\n", i)
wg.Done()
}(i)
}
wg.Wait()
}
在具有12核心CPU的本地计算机上,此代码将按预期方式随机输出。 但是,当我在go playground environment中运行代码时,得到了意外的结果。我知道Go操场只使用一个内核来运行代码,因此预期的输出应该是 No 0 goroutine begin 的一个,但是它总是以最后一个数字 No 9 goroutine开始开始。那是正确的还是我错过了什么?
答案 0 :(得分:3)