一尘不染

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

go

此示例取自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")
}

输出

hello
world
hello
world
hello
world
hello
world
hello

为什么world只打印4次数而不是5


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

程序执行首先初始化主程序包,然后调用函数main。当函数main返回时,程序退出。它不等待其他(非主)goroutine完成。


阅读 238

收藏
2020-07-02

共1个答案

一尘不染

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

2020-07-02