go – 缓冲/无缓冲通道

有人可以解释,为什么如果通道被缓冲,程序不会以fatal_error退出?

无缓冲的频道

package main

func main() {
    c := make(chan int)
    c <- 3
}

fatal error: all goroutines are asleep - deadlock!

缓冲频道

package main

func main() {
    c := make(chan int, 1)
    c <- 3
}

[no output]

Program exited.

谢谢!

最佳答案
如果缓冲区中有空间,则写入缓冲通道不会阻止.

如果您尝试在缓冲区大小为1的通道中放入两个项目,则会出现相同的错误:

package main

func main() {
    c := make(chan int, 1)
    c <- 3
    c <- 4
}

给你:

fatal error: all goroutines are asleep - deadlock!

转载注明原文:go – 缓冲/无缓冲通道 - 代码日志