有人可以向我解释为什么第一个代码运行但第二个代码失败吗?
第一 :
func main() {
channel := make(chan int)
go demo(channel)
num := <-channel
println(num)
}
func demo(channel chan int) {
channel <- 2
}
Run Code Online (Sandbox Code Playgroud)
第二个:
func main() {
demo()
}
func demo() {
channel := make(chan int)
channel <- 2
num := <-channel
println(num)
}
Run Code Online (Sandbox Code Playgroud)
在第二个中,我从演示函数中的通道获取输入,但它仍然造成死锁,有人可以简要解释一下吗?我所看到的是,当我在同一范围内调用通道时,它会导致问题。
你的通道是无缓冲的,所以写入它会阻塞,因为没有其他 goroutine 可以从中读取。
进行此更改,它将运行:
channel := make(chan int, 1)
Run Code Online (Sandbox Code Playgroud)