重用 Go 通道会导致死锁

tar*_*lah 0 concurrency channel go

我是新手golang(有Java并发背景)。考虑一下这种和平的代码:

package main

import "fmt"

func sendenum(num int, c chan int) {
    c <- num
}

func main() {
    c := make(chan int)
    go sendenum(0, c)
    x, y := <-c, <-c
    fmt.Println(x, y)
}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我收到此错误

fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan receive]:
main.main()
    /home/tarrsalah/src/go/src/github.com/tarrsalah/stackoverflow/chan_dead_lock.go:12 +0x90
exit status 2
Run Code Online (Sandbox Code Playgroud)

我知道,添加另一条go sendenum(0, c)语句可以解决问题,...但是

僵局何时何地发生?