Go 在这种情况下没有看到恐慌

Go 在这种情况下没有看到恐慌,go,Go,我看到了恐慌 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 func main(){ ch:=制造(成交量) 在这两

我看到了恐慌

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
func main(){
ch:=制造(成交量)

在这两个例子中,这是通道的行为。有两种类型的通道,缓冲和非缓冲

缓冲通道有一定的容量来存储通道内的项目。就像缓冲区一样

无缓冲通道在通道中没有存储项目的位置,这意味着在将任何内容发送到无缓冲通道或写入无缓冲通道之前,需要从中读取很多内容。这意味着您必须在通道的每一端都有一个goroutine,一个准备发送,另一个准备接收

在第一个示例中:

func main() {
    ch := make(chan int)
    ch <- 1
    fmt.Println(<-ch)
}
func main() {
    var wg sync.WaitGroup

    ch := make(chan int)

    wg.Add(1)
    go func() {
        <-ch 
        wg.Done()
    }()

    wg.Wait()
}
func main(){
ch:=制造(成交量)

正如预期的那样,这个例子令人恐慌:
func main() {
    var wg sync.WaitGroup

    ch := make(chan int)

    wg.Add(1)
    go func() {
        <-ch 
        wg.Done()
    }()

    wg.Wait()
}