私は非常に新しいです。なぜこのコードにこの出力があるのかわかりません。私はスリープによって新しいゴルーチンに指定された時間だけ別のスレッドが開始されることを理解しています。私は逐次的に論理を描こうとしています。そして、 "世界"のように見えるのはいつも "hello"の前に印刷するべきです。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