Я пытаюсь создать опросщик в Go, который раскручивается и каждые 24 часа выполняет функцию.
Я также хочу иметь возможность остановить опрос, я пытаюсь сделать это, имея готовый канал и передавая пустую структуру, чтобы остановить для l oop.
В моих тестах for просто зацикливается бесконечно, и я не могу остановить его, неправильно ли я использую готовый канал? Случай тикера работает, как и ожидалось.
Poller struct {
HandlerFunc HandlerFunc
interval *time.Ticker
done chan struct{}
}
func (p *Poller) Start() error {
for {
select {
case <-p.interval.C:
err := p.HandlerFunc()
if err != nil {
return err
}
case <-p.done:
return nil
}
}
}
func (p *Poller) Stop() {
p.done <- struct{}{}
}
Вот тест, выполняющий код и вызывающий бесконечное l oop.
poller := poller.NewPoller(
testHandlerFunc,
time.NewTicker(1*time.Millisecond),
)
err := poller.Start()
assert.Error(t, err)
poller.Stop()