2019-10-08 11:39:41 +03:00

42 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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