У меня есть две горотины: главная worker
и helper
что он раскручивается для какой-то помощи. helper
могут возникать ошибки, поэтому я использую канал для передачи ошибок из helper
к worker
.
func helper(c chan <- error) (){
//do some work
c <- err // send errors/nil on c
}
Вот как helper()
называется:
func worker() error {
//do some work
c := make(chan error, 1)
go helper(c)
err := <- c
return err
}
Вопросы:
Является ли утверждение
err := <- c
блокированиеworker
? Я так не думаю, так как канал буферизован.Если он блокируется, как мне сделать его неблокирующим? Мое требование состоит в том, чтобы иметь
worker
и его вызывающий абонент продолжает остальную часть работы, не дожидаясь, пока значение появится на канале.
Спасибо.
c
?