Пытаюсь понять как работает гоу . и чего то не доходит
Почему в данном случае программа блокируется.
func main() {
intCh := make(chan int)
intCh <- 10 // функция main блокируется
fmt.Println(<-intCh)
}
А если канал имеет буфер то все работает до конца
func main() {
intCh := make(chan int,100)
intCh <- 10 // функция main неблокируется
fmt.Println(<-intCh)
}
Но я чего то логику не уловил. Ведь канал должен блокироваться ибо кто то должен получить данные из гроутин (в данном случае основная main). Так как мы все запускаем в main то канал блокируется . Но почему он не блокируется во втором случае. То есть код доходит гроутины с буфером ложит туда данные и все, так как он с буфером он некогда не блокируется. Типо такая логика и все ?