问答详情
源自:5-3 进阶配方 - 实战攻下channel资源争抢

这样为什么报错

ch := make(chan int)


// fmt.Println(ch)

ch <- 1

// 输出channel

go func() {

fmt.Println(<-ch)

}()


提问者:慕粉第一号 2021-08-07 18:19

个回答

  • 慕虎4228555
    2021-08-16 15:55:25

    这是因为ch<- 1 这个操作,是阻塞操作,就是说 遇到了 a<-1 代码就不走了,什么时候代码往下走?必须等到ch里面的消息被读出去才会继续走

    可以简单改为:

    ch := make(chan int)
    
    // fmt.Println(ch)
    go func() {
       ch <- 1
    }()
    
    // 输出channel
    
    go func() {
    
       fmt.Println(<-ch)
    
    }()
    time.Sleep(time.Second*2)