Метод time.Timer.Reset

Метод Timer.Reset позволяет изменить длительность ожидания уже существующего таймера. Он останавливает текущий отсчет и запускает таймер заново с новой длительностью. Метод возвращает true, если таймер был активен на момент вызова, и false, если таймер уже истек или был остановлен. Метод принимает один параметр - новую длительность типа time.Duration.

Синтаксис

gotimer.Reset(duration)

Пример

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

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  timer := time.NewTimer(1 * time.Second)
  active := timer.Reset(2 * time.Second)
  fmt.Println(active)
}

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

gotrue

Пример

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

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  timer := time.NewTimer(1 * time.Second)
  time.Sleep(2 * time.Second)
  active := timer.Reset(1 * time.Second)
  fmt.Println(active)
}

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

gofalse

Пример

Давайте используем Reset в сочетании с каналом таймера для создания повторяющихся действий с изменяемой задержкой:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  timer := time.NewTimer(1 * time.Second)
  for i := 0; i < 3; i++ {
    <-timer.C
    fmt.Println("tick", i)
    timer.Reset(1 * time.Second)
  }
}

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

go"tick 0"
"tick 1"
"tick 2"

Пример

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

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  timer := time.NewTimer(500 * time.Millisecond)
  for i := 0; i < 5; i++ {
    <-timer.C
    fmt.Println("event", i)
    if i%2 == 0 {
      timer.Reset(300 * time.Millisecond)
    } else {
      timer.Reset(700 * time.Millisecond)
    }
  }
}

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

go"event 0"
"event 1"
"event 2"
"event 3"
"event 4"

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

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