Функция time.After
Функция time.After создает канал типа <-chan time.Time,
в который через заданный промежуток времени отправляется текущее время.
В первый параметр функция принимает значение типа time.Duration,
задающее длительность задержки. Возвращаемый канал можно использовать
в операторе select для реализации таймаутов или в простых
сценариях ожидания.
Синтаксис
time.After(duration)
Пример
Давайте создадим канал с задержкой в 2 секунды и дождемся получения значения из него:
package main
import (
"fmt"
"time"
)
func main() {
ch := time.After(2 * time.Second)
t := <-ch
fmt.Println(t)
}
Результат выполнения кода (время будет зависеть от момента запуска):
"2026-09-04 14:23:45.123456789 +0300 MSK m=+2.000000001"
Пример
Используем time.After с оператором select для
реализации таймаута при чтении из другого канала:
package main
import (
"fmt"
"time"
)
func main() {
dataCh := make(chan string)
go func() {
time.Sleep(1 * time.Second)
dataCh <- "result"
}()
select {
case msg := <-dataCh:
fmt.Println("Received:", msg)
case <-time.After(3 * time.Second):
fmt.Println("Timeout")
}
}
Результат выполнения кода (если горутина успеет отправить данные до истечения 3 секунд):
"Received: result"
Пример
Используем time.After для создания задержки между выполнением
действий в бесконечном цикле:
package main
import (
"fmt"
"time"
)
func main() {
for i := 1; i <= 3; i++ {
fmt.Println("Iteration", i)
<-time.After(500 * time.Millisecond)
}
}
Результат выполнения кода:
"Iteration 1"
"Iteration 2"
"Iteration 3"
Смотрите также
-
функцию
time.Sleep,
которая приостанавливает выполнение текущей горутины на заданное время -
функцию
time.NewTimer,
которая создает таймер, который можно остановить или сбросить -
функцию
time.Tick,
которая создает канал, отправляющий значения через регулярные интервалы -
функцию
time.Since,
которая возвращает время, прошедшее с указанного момента