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

go并发的一点小疑问

go并发的一点小疑问

慕桂英546537 2019-03-10 14:34:46
package mainimport "fmt"func main() {    go loop()    go loop() }func loop() {    for i := 0; i < 10; i++ {         fmt.Println(i)     } }这是我的代码,结果是什么都没输出;按我的理解是应该输出两边0-9的
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

Go语言的原则是当main函数运行结束后,所有正在运行的协程都会终止! 也就是说主程序就已经退出了,go后的两个function还没来得及执行,所以看不到打印。
你可以让主程序“睡”一会儿再退出,然后看看结果就明白了!

package mainimport (   "fmt"
   "time")func main() {   go loop()   go loop()
   time.Sleep(500000)
}func loop() {    for i := 0; i<10; i++ {
        fmt.Println(i)
    }
}


查看完整回答
反对 回复 2019-03-10
?
Helenr

TA贡献1780条经验 获得超3个赞

好歹让主go routine阻塞住不要退出呐

package mainimport (
    "fmt"    "sync")var wg sync.WaitGroupfunc main() {

    go loop()
    go loop()

    wg.Wait()
}func loop() {
    wg.Add(1)
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
    wg.Done()
}


查看完整回答
反对 回复 2019-03-10
  • 2 回答
  • 0 关注
  • 408 浏览

添加回答

举报

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