Функция time.After

Функция time.After создает канал типа <-chan time.Time, в который через заданный промежуток времени отправляется текущее время. В первый параметр функция принимает значение типа time.Duration, задающее длительность задержки. Возвращаемый канал можно использовать в операторе select для реализации таймаутов или в простых сценариях ожидания.

Синтаксис

gotime.After(duration)

Пример

Давайте создадим канал с задержкой в 2 секунды и дождемся получения значения из него:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  ch := time.After(2 * time.Second)
  t := <-ch
  fmt.Println(t)
}

Результат выполнения кода (время будет зависеть от момента запуска):

go"2026-09-04 14:23:45.123456789 +0300 MSK m=+2.000000001"

Пример

Используем time.After с оператором select для реализации таймаута при чтении из другого канала:

gopackage 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 секунд):

go"Received: result"

Пример

Используем time.After для создания задержки между выполнением действий в бесконечном цикле:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  for i := 1; i <= 3; i++ {
    fmt.Println("Iteration", i)
    <-time.After(500 * time.Millisecond)
  }
}

Результат выполнения кода:

go"Iteration 1"
"Iteration 2"
"Iteration 3"

Смотрите также

  • функцию time.Sleep,
    которая приостанавливает выполнение текущей горутины на заданное время
  • функцию time.NewTimer,
    которая создает таймер, который можно остановить или сбросить
  • функцию time.Tick,
    которая создает канал, отправляющий значения через регулярные интервалы
  • функцию time.Since,
    которая возвращает время, прошедшее с указанного момента