这样为什么报错

来源:5-3 进阶配方 - 实战攻下channel资源争抢

慕粉第一号

2021-08-07 18:19

ch := make(chan int)


// fmt.Println(ch)

ch <- 1

// 输出channel

go func() {

fmt.Println(<-ch)

}()


写回答 关注

1回答

  • 慕虎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)


    慕虎4228...

    遇到了 ch<-1 代码就不走了,所以需要并发操作让下面的程序继续执行

    2021-08-16 15:59:53

    共 1 条回复 >

Go并发之魂:Goroutine深入浅出【程序人生中的“米其林三星级”并发实战】

深入浅出Go并发核心:Goroutine,斩获Goroutine面试题。

5499 学习 · 8 问题

查看课程

相似问题