воскресенье, 26 июля 2020 г.

Пакет time в Golang, тип Ticker

Ticker содержит канал, который поставляет "тики" часов с интервалами.

type Ticker struct {
    C <-chan Time // Канал, по которому доставляются тики.
    // содержит отфильтрованные или неэкспортированные поля
}

Функция NewTicker

func NewTicker(d Duration) *Ticker

NewTicker возвращает новый Ticker, содержащий канал, который будет отправлять время с периодом, заданным аргументом продолжительности. Он корректирует интервалы или сбрасывает тики, чтобы восполнить медленные приемники. Продолжительность d должна быть больше нуля; если нет, NewTicker будет паниковать. Остановите тикер, чтобы освободить связанные ресурсы.

Пример использования Ticker

package main

import (
    "fmt"
    "time"
)

func main() {
    ticker := time.NewTicker(time.Second)
    defer ticker.Stop()
    done := make(chan bool)
    go func() {
        time.Sleep(10 * time.Second)
        done <- true
    }()
    for {
        select {
        case <-done:
            fmt.Println("Готово!")
            return
        case t := <-ticker.C:
            fmt.Println("Текущее время: ", t)
        }
    }
}

Вывод:

Текущее время:  2020-07-26 22:03:37.925067 +0500 +05 m=+1.008175801
Текущее время:  2020-07-26 22:03:38.9258884 +0500 +05 m=+2.008997201
Текущее время:  2020-07-26 22:03:39.9282 +0500 +05 m=+3.011308801
Текущее время:  2020-07-26 22:03:40.9290208 +0500 +05 m=+4.012129601
Текущее время:  2020-07-26 22:03:41.9298391 +0500 +05 m=+5.012947901
Текущее время:  2020-07-26 22:03:42.9313325 +0500 +05 m=+6.014441301
Текущее время:  2020-07-26 22:03:43.9330786 +0500 +05 m=+7.016187401
Текущее время:  2020-07-26 22:03:44.9390601 +0500 +05 m=+8.022168901
Текущее время:  2020-07-26 22:03:45.9320627 +0500 +05 m=+9.015171501
Текущее время:  2020-07-26 22:03:46.941485 +0500 +05 m=+10.024593801
Готово!

Метод Stop

func (t *Ticker) Stop()

Stop отключает тикер. После остановки никакие тики больше не будут отправляться. Stop не закрывает канал, чтобы предотвратить чтение из канала конкурентной goroutine ошибочного "тика".


Читайте также:


Комментариев нет:

Отправить комментарий