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

关于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!

报错呢?

正在回答

2 回答

改成这样就可以了:

https://img1.sycdn.imooc.com//5b1d052a0001ac5d11921054.jpg

0 回复 有任何疑惑可以回复我~

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)}


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于chan的疑问

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信