Невозможно остановить тикер таймера - PullRequest
0 голосов
/ 25 июня 2018

Я определил несколько тикеров, и когда я пытаюсь остановить их, я вижу ниже

undefined: тикер в тикере. Stop

undefined: Q30sticker в Q30sticker.Stop

Пример кода:

if activenode() {
                    cipaflage = true
                    break

                } else {
                    if cipaflage == true {
                        defer ticker.Stop()
                        defer Q30sticker.Stop()
                        cipaflage = false
                        }
                    continue
                }

И я объявил тикер, как показано ниже

ticker := time.NewTicker(59 * time.Second)
Q30sticker := time.NewTicker(time.Second * 30).C

1 Ответ

0 голосов
/ 25 июня 2018

Согласно документации здесь

Ticker имеет экспортируемое поле C.

type Ticker struct {
        C <-chan Time // The channel on which the ticks are delivered.
        // contains filtered or unexported fields
}

Вы можете получать "тики" или пульс на канале C, но если вы делаете это:

Q30sticker := time.NewTicker(time.Second * 30).C

затем Q30sticker содержит ссылку на канал C, а не тип тикера. Это структура time.Ticker, которая определяет метод Stop.

Обновите переменную, чтобы она содержала тип тикера (удалив .C):

Q30sticker := time.NewTicker(time.Second * 30)

А там, где вы получаете от канала, используйте синтаксис . для доступа к каналу.

<-Q30sticker.C
...