问答详情
源自:3-2 基础节点

关于chan的疑问

package main

import (
   "fmt"
)

func main() {
   ch := make(chan string)
   for i := 0; i <= 5; i++ {
      go printHelloWorld(i, ch)
   }
   for {
      if msg,ok := <-ch;ok{
         fmt.Println(msg)
      }else{
         break
      }
   }

}

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

老师:为什么我这段代码输出会有个  

fatal error: all goroutines are asleep - deadlock!

报错呢?

提问者:sliverg 2018-06-07 06:50

个回答

  • openset
    2018-06-10 19:02:35

    改成这样就可以了:

    https://img1.mukewang.com/5b1d052a0001ac5d11921054.jpg

  • openset
    2018-06-10 18:54:54

    ch没有关闭,一直在等待。

    package mainimport (	"fmt")func main() {	ch := make(chan string)	for i := 0; i <= 5; i++ {		go printHelloWorld(i, ch)	}	for i := 0; i <= 5; i++ {		fmt.Println(<-ch)	}}func printHelloWorld(i int, ch chan<- string) {	ch <- fmt.Sprintf("hello world %d\n", i)}