Я уверен, что есть простое объяснение этой тривиальной ситуации, но я новичок в модели go
concurrency.
когда я запускаю этот пример
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 <-
в goroutine
заставляет пример работать так, как мы ожидали
package main
import "fmt"
func main() {
c := make(chan int)
go func(){
c <- 1
}()
fmt.Println(<-c)
}
Снова, почему?
Пожалуйста, мне нужно глубокое объяснение, а не только, как устранить тупик и исправить код.