这个例子取自tour.golang.org/#63package mainimport ( "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")}输出helloworldhelloworldhelloworldhelloworldhello为什么world只打印4时间而不是5?编辑:答案可以从golang 规范中引用:程序执行首先初始化主包,然后调用函数 main。当函数 main 返回时,程序退出。它不会等待其他(非主)goroutine 完成。
3 回答
慕姐8265434
TA贡献1813条经验 获得超2个赞
当您的主函数结束时,您的程序结束,即所有 goroutine 都终止。您的主要在go say("world")
完成之前终止。如果你在 main 的结尾睡了一段时间,你应该会看到最后一个世界。
互换的青春
TA贡献1797条经验 获得超6个赞
因为调用 gorouting 在您生成的第二个之前终止。这会导致第二个关闭。为了说明,稍微修改您的代码:
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Print(i)
fmt.Println(":"+s)
}
}
func main() {
go say("world")
say("hello")
}
尝试将“等待”或睡眠放在主函数的末尾。
- 3 回答
- 0 关注
- 188 浏览
添加回答
举报
0/150
提交
取消