Что выведет этот код с каналами?

Middle
299 просмотров
AFK Offer AI

Пример: ch := make(chan int, 1); ch <- 1; ch <- 2; fmt.Println(<-ch). Ответ: deadlock. Буфер 1, первый send проходит, второй блокируется навечно — горутина одна. Или: ch := make(chan int); go func() { ch <- 1 }(); go func() { ch <- 2 }(); fmt.Println(<-ch); fmt.Println(<-ch). Тут ок — два send, два receive, но порядок недетерминирован. Задачи на каналы проверяют понимание блокировки, буферизации и когда возникает deadlock.

Следующий вопрос

Как реализовать timeout для операции?