go并发的一点小疑问

package main

import "fmt"

func main() {
    go loop()
    go loop()
}

func loop() {
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
}

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

阅读 2.3k
4 个回答

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

package main

import (
   "fmt"
   "time"
)


func main() {
   go loop()
   go loop()
   time.Sleep(500000)
}

func loop() {
    for i := 0; i<10; i++ {
        fmt.Println(i)
    }
}

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

package main

import (
    "fmt"
    "sync"
)

var wg sync.WaitGroup

func main() {

    go loop()
    go loop()

    wg.Wait()
}

func loop() {
    wg.Add(1)
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
    wg.Done()
} 
新手上路,请多包涵

主线程结束了,整个程序就结束了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题