Таймеры (Timers)|Timers
#
// Часто мы хотим выполнить код Go в какой-то момент в
// будущем или повторно через определенный промежуток
// времени. Встроенные функции _таймера_ и _тикера_ Go
// облегчают обе эти задачи. Сначала мы рассмотрим
// таймеры, а затем [тикеры](tickers).
package main
import (
"fmt"
"time"
)
func main() {
// Таймеры позволяет выполнить одно событие в будущем.
// Вы сообщаете таймеру, как долго вы хотите ждать,
// и он предоставляет канал, который будет уведомлен
// в это время. Этот таймер будет ждать 2 секунды.
timer1 := time.NewTimer(2 * time.Second)
// `<-timer1.C` блокирует канал таймера `C` пока
// не будет отправлено сообщение о том, что таймер истек
<-timer1.C
fmt.Println("Timer 1 expired")
// Если бы вы просто хотели подождать, вы могли бы
// использовать `time.Sleep`. Одна из причин, по
// которой таймер может быть полезен, заключается
// в том, что вы можете отменить таймер до его
// истечения, как в этом примере.
timer2 := time.NewTimer(time.Second)
go func() {
<-timer2.C
fmt.Println("Timer 2 expired")
}()
stop2 := timer2.Stop()
if stop2 {
fmt.Println("Timer 2 stopped")
}
}
// Первый таймер истекает через ~2с после запуска программы,
// но второй должен быть остановлен до того, как он истечет.
$ go run timers.go
Timer 1 expired
Timer 2 stopped