我确信对于这种微不足道的情况有一个简单的解释,但我是go
并发模型的新手。
当我运行这个例子时
package main
import "fmt"
func main() {
c := make(chan int)
c <- 1
fmt.Println(<-c)
}
我收到此错误:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send]:
main.main()
/home/tarrsalah/src/go/src/github.com/tarrsalah/tour.golang.org/65.go:8 +0x52
exit status 2
为什么 ?
包装c <-
在 agoroutine
中使示例按我们预期的方式运行
package main
import "fmt"
func main() {
c := make(chan int)
go func(){
c <- 1
}()
fmt.Println(<-c)
}
再次,为什么?
拜托,我需要深入的解释,而不仅仅是如何消除死锁和修复代码。