Go за Прикладом: Таймери

Work in Progress / Сайт в процесі розробки

Інколи нам потрібно виконати певний код на якийсь момент в майбутньому, або запускати його через певні інтервали часу - це стає можливими завдяки сосбливим можливостям Go відомим як: таймер та маятник. Спершу ми познайомимось з таймерами, а в наступному прикладі побачимо що таке маятник.

package main
import "time"
import "fmt"
func main() {

Таймер представляє поодиноку подію що станеться в майбуутньому. Ви вказуєте таймеру на скільки часу ви хочете зачекати, і таймер забезпечує вам канал по якому ви можете отримати повідомлення про те що час очікування скінчився. Наш таймер, наприклад, розрахований на 2 секунди.

    timer1 := time.NewTimer(2 * time.Second)

<-timer1.C блокується каналом C допоки не буде надіслано повідомлення що час витік.

    <-timer1.C
    fmt.Println("Таймер 1 просрочено")

Якщо вам просто хочеться зачекати, ми можете використати time.Sleep. Одна з причин костності таймер, те що він може бути зупинений в будь-який момент.

    timer2 := time.NewTimer(time.Second)
    go func() {
        <-timer2.C
        fmt.Println("Таймер 2 просрочено")
    }()
    stop2 := timer2.Stop()
    if stop2 {
        fmt.Println("Тaймер 2 зупинено")
    }
}

Перший таймер витече приблизно через 2 секунди після старту, буде зупинено ще до того, як він матиме шанс витікти.

$ go run timers.go
Таймер 1 просрочено
Тaймер 2 зупинено

Наступний приклад: Маятники.