第一个goroutine例子,奇怪的结果

tar*_*lah 3 go goroutine

此示例取自tour.golang.org/#63

package main

import (
    "fmt"
    "time"
)

func say(s string) {
    for i := 0; i < 5; i++ {
        time.Sleep(100 * time.Millisecond)
        fmt.Println(s)
    }
}

func main() {
    go say("world")
    say("hello")
}
Run Code Online (Sandbox Code Playgroud)

输出

hello
world
hello
world
hello
world
hello
world
hello
Run Code Online (Sandbox Code Playgroud)

为什么world只打印4时代而不是5


编辑:答案可以引用golang规范:

程序执行从初始化主包然后调用main函数开始.当函数main返回时,程序退出.它不等待其他(非主要)goroutines完成.

Vol*_*ker 5

当您的主要功能结束时,程序结束,即所有goroutine终止.你的主要终止在go say("world")完成之前.如果你在主要结束时睡一段时间,你应该看到最后的世界.