此示例取自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?
world
4
5
编辑: 答案可以引自golang规范:
程序执行首先初始化主程序包,然后调用函数main。当函数main返回时,程序退出。它不等待其他(非主)goroutine完成。
当您的主要功能结束时,程序即结束,即所有goroutine均终止。您的主体在go say("world")完成之前会终止。如果您在主课程结束时睡了一段时间,您应该会看到最后的世界。
go say("world")