为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕少森 2021-06-23 14:02:29
这个例子取自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 的结尾睡了一段时间,你应该会看到最后一个世界。


查看完整回答
反对 回复 2021-06-28
?
互换的青春

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")

}

尝试将“等待”或睡眠放在主函数的末尾。


查看完整回答
反对 回复 2021-06-28
  • 3 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信