Недавно я хотел отправить кое-что на сервер statsD из приложения golang, не настраивая совершенно новый init для задания cron.
Оказывается, это довольно просто, когда вы используете горутины, чтобы заставить это работать.
Объяснение
- Сначала вы инициируете
Ticker
. Таймеры предназначены для случаев, когда вы хотите сделать что-то один раз в будущем — бегущие строки — для случаев, когда вы хотите делать что-то неоднократно через равные промежутки времени — GoByExample. - Вы бы сделали канал
chan
, который вы сможетеclose()
позже. Это поможет нам изящно остановить тикер, когда основной поток остановится. - Запустите свою горутину, как обычно с
go func()
- Используйте комбинацию
for
наselect
, которая позволяет вам многократно ожидать операции с несколькими каналами. ticker.C
дает намchan
изtime.Time
quit
дает намchan
изbool
- Используя эти два, мы можем изящно вызвать
report()
.
Примечания
- Не забудьте использовать возвращаемый
chan bool
, когда вы вызываетеStart()
, чтобы изящно закрыть тикер.