问答详情
源自:2-2 Hello World并发版

用chan接收数据后,打印输出会出现deadlock

func main() {
   ch := make(chan string)

   for i := 0; i < 300; i++ {
      go PrintHello(i, ch)
   }

   for {
      msg := <-ch
      fmt.Println(msg)
   }

}

func PrintHello(i int, ch chan string) {
   ch <- fmt.Sprintf("print %d\n", i)
}


运行后:

fatal error: all goroutines are asleep - deadlock!


goroutine 1 [chan receive]:

main.main()

~/simpleGoRoutine.go:15 +0xa1

print 0


print 2

...

提问者:慕妹2184772 2020-06-08 11:50

个回答

  • Amanoi
    2020-06-18 18:07:09

    第二个for 从管道中取数据 取完后仍然会取到0值