// Часто мы хотим выполнить код 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") } }