Конкурентность в Go
Go select and Timeouts
Wait on several channels at once, give up after a timeout, or check without waiting.
Что вы узнаете
- select with several cases
- time.After
- default
select
case <-fastready after 10 mscase <-slowready after 200 mscase <-time.After(50ms)timeoutThe first ready channel wins
select waits for the first of several channel operations that is ready. It is how a goroutine listens to more than one channel, adds a timeout, or checks a channel without waiting.
The first select receives from fast because it is ready first. In the second, time.After delivers a value after 50 milliseconds, before slow is ready, so the timeout case runs. A default case runs at once when no channel is ready.
Главное
- select runs the first case that is ready.
time.Afteradds a timeout.- default runs when nothing is ready.
Пример на Go, который можно запустить
main.go
package main
import (
"fmt"
"time"
)
func main() {
fast := make(chan string)
slow := make(chan string)
go func() {
time.Sleep(10 * time.Millisecond)
fast <- "fast result"
}()
go func() {
time.Sleep(200 * time.Millisecond)
slow <- "slow result"
}()
select {
case message := <-fast:
fmt.Println(message)
case message := <-slow:
fmt.Println(message)
}
select {
case message := <-slow:
fmt.Println(message)
case <-time.After(50 * time.Millisecond):
fmt.Println("timed out waiting for slow")
}
ready := make(chan int)
select {
case value := <-ready:
fmt.Println(value)
default:
fmt.Println("nothing ready, moving on")
}
}
fast result
timed out waiting for slow
nothing ready, moving onПрактика
Откройте пример в онлайн-компиляторе, измените значение или добавьте строку и попробуйте предсказать вывод до запуска. Затем намеренно сломайте код и прочитайте сообщение компилятора.
Закончили этот урок?
Отметьте его как изученный, чтобы следить за прогрессом.
Ваш прогресс сохранён в этом браузере Войдите, чтобы он был доступен на всех устройствах.
Попрактикуйтесь на задаче
Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.
Все задачи