Небуферизованному каналу нужны две конечные точки для работы, поэтому давайте начнем с правильного примера:
package main
func main() {
go fun2()
<-ch
<-ch
}
func fun2() {
ch <- 1
ch <- 2
}
var ch = make(chan int)
Здесь fun2()
отправляет два значения, а main()
получает два значения.
Ваш пример кода имеет только одну конечную точку, поэтому канал построен неправильно, поэтому это тупик , но процедуры main
обычно завершаются, поэтому вы не видите ошибку.Здесь нет второй конечной точки, поэтому это тупик:
package main
func main() {
var ch = make(chan int)
ch <- 1
}
Выход:
fatal error: all goroutines are asleep - deadlock!