请解释这个Go程序为什么发生了死锁
func main() {
// 1、给通道分配内存
out := make(chan int)
// 2、在 main goroutine 中发送数据
out <- 2
// 3、在新的 goroutine 中接收数据
go f1(out)
}
func f1(in chan int) {
fmt.Println(<-in)
}
在 Go 中,对 channel 的发送和读取操作是阻塞的。也就是说,当你尝试向一个 channel 发送数据时,如果没有其他协程在从这个 channel 读取数据,那么发送操作就会被阻塞,程序会停在发送操作这里无法执行下去。同样地,如果你尝试从一个 channel 读取数据,如果没有其他协程在这个 channel 发送数据,那么读操作也会被阻塞。
如果想让上述程序正常的运行,该如何修改代码呢?