go并发的一点小疑问

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

这是我的代码,结果是什么都没输出;按我的理解是应该输出两边0-9的


一只斗牛犬
浏览 398回答 2
2回答

慕娘9325324

Go语言的原则是当main函数运行结束后,所有正在运行的协程都会终止! 也就是说主程序就已经退出了,go后的两个function还没来得及执行,所以看不到打印。你可以让主程序“睡”一会儿再退出,然后看看结果就明白了!package&nbsp;mainimport&nbsp;(&nbsp;&nbsp;&nbsp;"fmt" &nbsp;&nbsp;&nbsp;"time")func&nbsp;main()&nbsp;{&nbsp;&nbsp;&nbsp;go&nbsp;loop()&nbsp;&nbsp;&nbsp;go&nbsp;loop() &nbsp;&nbsp;&nbsp;time.Sleep(500000) }func&nbsp;loop()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i&nbsp;:=&nbsp;0;&nbsp;i<10;&nbsp;i++&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fmt.Println(i) &nbsp;&nbsp;&nbsp;&nbsp;} }

弑天下

好歹让主go routine阻塞住不要退出呐package&nbsp;mainimport&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;"fmt"&nbsp;&nbsp;&nbsp;&nbsp;"sync")var&nbsp;wg&nbsp;sync.WaitGroupfunc&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;go&nbsp;loop() &nbsp;&nbsp;&nbsp;&nbsp;go&nbsp;loop() &nbsp;&nbsp;&nbsp;&nbsp;wg.Wait() }func&nbsp;loop()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;wg.Add(1) &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i&nbsp;:=&nbsp;0;&nbsp;i&nbsp;<&nbsp;10;&nbsp;i++&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fmt.Println(i) &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;wg.Done() }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5