我想了解 Go 中的频道。我读过默认情况下发送和接收块,直到发送方和接收方都准备好。但是我们如何确定发送方和接收方的准备情况。
例如在下面的代码中
package main
import "fmt"
func main() {
ch := make(chan int)
ch <- 1
fmt.Println(<-ch)
}
该程序将卡在通道发送操作上,永远等待有人读取值。即使我们在 println 语句中有一个接收操作,它也会以死锁结束。
但是对于下面的程序
package main
import "fmt"
func main() {
ch := make(chan int)
go func () {
ch <- 1
}()
fmt.Println(<-ch)
}
整数从 go 例程成功传递到主程序。是什么让这个计划奏效?为什么第二个有效但第一个无效?go routine 会造成一些差异吗?
LEATH
九州编程
相关分类