为什么go中的main执行完了 协程还有输出,是因为stdout吗

main

func main() {
    for i:=0; i<=5;i++ {
        go func(i int) {
            fmt.Println(i)
        }(i)
    }
    fmt.Println("执行完成")
}

输出

0
2
5
4
执行完成
3

执行完成如果输出了,主进程不应该就结束了,为什么3会在“执行完成”后面输出。跟stdout有什么关系吗,有的话请大家帮忙解答下。

阅读 2.7k
2 个回答

mian.mian结束了,但是runtime.main没有结束。

runtime.goexit => runtime.main => mian.mian

执行完成如果输出了,主进程应该就即将结束了

程序不会突然死掉的,最后会有一些清理的活。这个时间不会太长,不过你的协程输出也用不了多长时间。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题