Функция time.NewTimer

Функция time.NewTimer создает новый таймер, который отправит текущее время в свой канал C по истечении заданного интервала. В первый параметр функция принимает значение типа time.Duration, определяющее длительность ожидания перед срабатыванием таймера. Функция возвращает указатель на структуру time.Timer.

Синтаксис

gotime.NewTimer(duration)

Пример

Давайте создадим таймер, который сработает через 2 секунды:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  timer := time.NewTimer(2 * time.Second)
  
  // Ждем сигнал от таймера
  t := <-timer.C
  fmt.Println("Timer fired at:", t)
}

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

go"Timer fired at: 2024-01-15 12:34:56.789012345 +0300 MSK m=+2.000123456"

Пример

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

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  timer := time.NewTimer(5 * time.Second)
  
  go func() {
    <-timer.C
    fmt.Println("Timer fired")
  }()
  
  time.Sleep(2 * time.Second)
  stopped := timer.Stop()
  if stopped {
    fmt.Println("Timer stopped")
  }
}

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

go"Timer stopped"

Пример

Давайте создадим таймер, который можно перезапустить с помощью метода Reset:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  timer := time.NewTimer(1 * time.Second)
  <-timer.C
  fmt.Println("First timer fired")
  
  // Перезапускаем таймер на 2 секунды
  timer.Reset(2 * time.Second)
  <-timer.C
  fmt.Println("Second timer fired")
}

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

go"First timer fired"
"Second timer fired"

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

  • функцию time.After,
    которая возвращает канал, в который будет отправлено время через указанный интервал
  • функцию time.Sleep,
    которая приостанавливает выполнение горутины на заданное время
  • метод time.Timer.Stop,
    который останавливает таймер и предотвращает его срабатывание
  • метод time.Timer.Reset,
    который изменяет интервал таймера и запускает его заново