РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
737 of 1593 menu

Тип time.Timer

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

Создание таймера

Для создания таймера используется функция time.NewTimer. Она принимает один параметр - длительность, через которую таймер должен сработать:

package main import ( "fmt" "time" ) func main() { timer := time.NewTimer(2 * time.Second) fmt.Println("Timer started") <-timer.C fmt.Println("Timer fired") }

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

"Timer started" "Timer fired"

В этом примере таймер создается на 2 секунды, после чего программа блокируется на чтении из канала timer.C до тех пор, пока таймер не сработает.

Остановка таймера

Метод Stop позволяет остановить таймер до того, как он сработает. Он возвращает true, если таймер был остановлен успешно (не сработал), и false, если таймер уже сработал или был остановлен ранее:

package main import ( "fmt" "time" ) func main() { timer := time.NewTimer(5 * time.Second) stopped := timer.Stop() if stopped { fmt.Println("Timer stopped successfully") } else { fmt.Println("Timer already fired") } }

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

"Timer stopped successfully"

В этом примере таймер останавливается до срабатывания, поэтому метод возвращает true.

Сброс таймера

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

package main import ( "fmt" "time" ) func main() { timer := time.NewTimer(1 * time.Second) time.Sleep(500 * time.Millisecond) reset := timer.Reset(3 * time.Second) if reset { fmt.Println("Timer was active, reset to 3 seconds") } else { fmt.Println("Timer was already expired") } <-timer.C fmt.Println("Timer fired after reset") }

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

"Timer was active, reset to 3 seconds" "Timer fired after reset"

В этом примере таймер сбрасывается на 3 секунды до того, как исходный интервал в 1 секунду истек, поэтому он срабатывает через 3 секунды после сброса.

Использование с select

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

package main import ( "fmt" "time" ) func main() { ch := make(chan string) go func() { time.Sleep(2 * time.Second) ch <- "Hello" }() timer := time.NewTimer(1 * time.Second) select { case msg := <-ch: fmt.Println("Received:", msg) case <-timer.C: fmt.Println("Timeout: 1 second passed") } }

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

"Timeout: 1 second passed"

В этом примере таймер срабатывает через 1 секунду, и блок select выбирает этот случай, поскольку канал ch получает значение только через 2 секунды.

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

  • функцию time.NewTimer,
    которая создает новый таймер
  • метод time.Timer.Stop,
    который останавливает таймер
  • метод time.Timer.Reset,
    который сбрасывает таймер на новый интервал
  • тип time.Ticker,
    который представляет периодический таймер
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить