time after golang

Пользователь

от marcelle , в категории: Общие вопросы , 4 года назад

Хочу создать приложение на Golang’е, чтобы какие-то действия выполнялись при определённом времени? Как это сделать вообще? Должно же быть что-то вроде будильника))


Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

6 ответов

Пользователь

от reymundo_schulist , 4 года назад

В Golang есть таймеры и тикеры, которые как раз-таки и позволяют выполнять код в будущем, один или несколько раз. Если ты хочешь сделать так, чтобы твоя программа делала какое-то действие при наступлении определённого времени, то это твой выбор.


Пользователь

от genoveva , 4 года назад

time.After ожидает указанную продолжительность и затем отправляет текущее время по возвращаемому каналу:

 

 

select {

case news := <-AFP:

   fmt.Println(news)

case <-time.After(time.Hour):

   fmt.Println("No news in an hour.")

}


Пользователь

от genoveva , 4 года назад

Подлежащий time.Timer не будет восстановлен сборщиком мусора, пока не сработает таймер. Если это проблема, используйте взамен time.NewTimer и вызовите его метод Stop, когда таймер больше не нужен:

 

 

for alive := true; alive; {

   timer := time.NewTimer(time.Hour)

   select {

   case news := <-AFP:

       timer.Stop()

       fmt.Println(news)

   case <-timer.C:

       alive = false

       fmt.Println("No news in an hour. Service aborting.")

   }

}


Пользователь

от newell , 4 года назад

ime.Tick возвращает канал, который доставляет такты (ticks) с одинаковыми интервалами:

go func() {

   for now := range time.Tick(time.Minute) {

       fmt.Println(now, statusUpdate())

   }

}()

Подлежащий time.Ticker не будет восстановлен сборщиком мусора. Если это проблема, используйте взамен time.NewTicker и вызовите его метод Stop, когда тикер больше не нужен.


Пользователь

от tessie_jacobs , 4 года назад

time.AfterFunc ждет в течение указанной продолжительности и затем вызывает функцию в своей собственной goroutine. Возвращает time.Timer, который можно использовать для отмены вызова:

func Foo() {

   timer = time.AfterFunc(time.Minute, func() {

       log.Println("Foo выполняется более минуты.")

   })

   defer timer.Stop()

   // Выполняем какую-либо работу

}


Пользователь

от marcelle , 4 года назад

Спасибо за помощь. Накидали много разных возможностей использования таймаутов, таймтиков и тайм афтер. Буду сейчас смотреть, что с этим всем можно сделать.