Go 为什么通道未关闭时没有死锁?

Go 为什么通道未关闭时没有死锁?,go,Go,Go运行时写入管道,然后不关闭管道,然后正常执行 为什么通道未关闭时没有死锁 主程序包 进口( `fmt` `时间` ) func乘积(num int)chan int{ ch:=制造(成交量,1) go func(num int){ 对于i:=0;i

Go运行时写入管道,然后不关闭管道,然后正常执行

为什么通道未关闭时没有死锁

主程序包
进口(
`fmt`
`时间`
)
func乘积(num int)chan int{
ch:=制造(成交量,1)
go func(num int){
对于i:=0;ich因为不存在两个goroutine互相等待并且没有一个goroutine可以继续执行的情况

您在一个单独的(非主)goroutine中读取通道,同时主goroutine不会被阻止,并在计时器达到1秒时退出

如果将read for循环移动到主goroutine,则会出现死锁错误。因为在这种情况下,程序将永远被阻止,因为您尝试读取的通道没有关闭,并且没有人再写入它


另请参见

,因为不存在两个goroutine互相等待且其中任何一个都不能继续执行的情况

您在一个单独的(非主)goroutine中读取通道,同时主goroutine不会被阻止,并在计时器达到1秒时退出

如果将read for循环移动到主goroutine,则会出现死锁错误。因为在这种情况下,程序将永远被阻止,因为您尝试读取的通道没有关闭,并且没有人再写入它

另见