Недавно я хотел отправить кое-что на сервер statsD из приложения golang, не настраивая совершенно новый init для задания cron.

Оказывается, это довольно просто, когда вы используете горутины, чтобы заставить это работать.

Объяснение

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

Примечания

  • Не забудьте использовать возвращаемый chan bool, когда вы вызываете Start(), чтобы изящно закрыть тикер.