Есть 2 и более генераторов данных, пишущих в общий канал. Необходимо закрыть канал со стороны потребителя данных так, чтобы приложение на запаниковало.
Наиболее простой вариант: через panic + recover. Но, как мне кажется, это идейно не верно.
Есть типовые подходы к решению такой проблемы?
Пример:
Run on playgroundpackage main
import "time"
func generator(v int, ch chan<- int) {
for {
ch <- v
}
}
func main() {
ch := make(chan int)
go generator(0, ch)
go generator(1, ch)
go generator(2, ch)
<-ch
close(ch)
time.Sleep(1 * time.Second)
// BOOM!
}