猿问

在这种情况下没有出现恐慌

我惊慌失措


func main() {

    ch := make(chan int)

    ch <- 1

    fmt.Println(<-ch)

}


fatal error: all goroutines are asleep - deadlock!


goroutine 1 [chan send]:

main.main()

    /tmp/sandbox058504389/main.go:10 +0x60

我相信,go会检测到主例程在写入时被阻塞,并且由于在写入非缓冲通道时发生了阻塞,因此永远不会到达读取代码段,并且我们会感到恐慌。为什么我们在下面的代码中看不到问题,为什么不慌张


func main() {

    fmt.Println("Hello, playground")


    var wg sync.WaitGroup


    ch := make(chan int)


    wg.Add(1)

    go func() {

        <-ch 

        wg.Done()

    }()


    wg.Wait()

}

鉴于在工作片段中,如果我将<-ch通道read更改为ch<-,即写操作,则确实会看到错误。有人可以解释我为什么吗?


POPMUISE
浏览 222回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答