我很新,我不確定爲什麼這個代碼有這個輸出。我知道睡眠會導致新的goroutine在指定的時間內啓動另一個線程。我試圖按順序繪製出邏輯,看起來「世界」應該總是在「你好」之前打印出來。Goroutine在for循環中導致可互換的操作
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(1 * time.Millisecond)
fmt.Println(s, i)
}
}
func main() {
go say("world")
say("hello")
}
實際輸出:
world 0
hello 0
hello 1
world 1
world 2
hello 2
hello 3
world 3
world 4
hello 4
預期輸出:
world 0
hello 0
world 1
hello 1
world 2
hello 2
...等
夠程不提供擔保,以什麼順序不同夠程將執行哪些代碼行。 – captncraig