внутри него горутина и бесконечный цикл, в котором есть селект, который следит за двумя каналами: done и ticker.C. Если вдруг в done что-то попало , нужно просто вернуть ошибку и выйти из функции. Как это лучше сделать? Например:
func Check() {
ticker := time.NewTicker(time.Second*10)
done := make(chan error)
go func() error {
for {
select {
case <-done:
return
case <-ticker.C:
// что-то делается
}
}
}()
return <-done
}
func Check() { ticker := time.NewTicker(time.Second*10) done := make(chan error) for { select { case <-done: return case <-ticker.C: // что-то делается } } }
defer ticker.Stop()?
хотя я не понимаю, что вы хотите получить. почему return внутри go func() пустой, почему там может вернуться ошибка и куда вы думаете ее вернуть 🙂
func Check() <-chan error { ticker := time.NewTicker(time.Second*10) done := make(chan error) go func() error { for { select { case <-done: return case <-ticker.C: // что-то делается } } }() return <-done }
Обсуждают сегодня