💬Как реализовать тайм-ауты для каналов в Go?



🔸Применение select для мультиплексирования каналов открывает широкие возможности и помогает сделать сложные или утомительные задачи тривиально простыми.



🔸В некоторых языках для реализации тайм-аута может потребоваться реализовать управление потоками, но select с вызовом функции time.After, возвращающей канал, через который будет отправлено сообщение после истечения указанного времени, делает эту задачу очень простой:





var ch chan int

select {

case m := <-ch:

fmt.Println(m)

case <-time.After(10 * time.Second):

fmt.Println("Timed out")

}



🔸Здесь нет оператора default, поэтому select заблокируется до выполнения одного из условий. Если канал ch не станет доступным для чтения до того, как в канал, возвращаемый функцией time.After, будет записано сообщение, то сработает второй оператор case и инструкция select

з
авершится по тайм-ауту.