Dear all, I have a couple of goroutines sending multiple results over a channel - a simple fan-in. They signal the completion on a done channel. Main selects on the results and done channel in parallel. As the select is random main sometimes misses to select the last result. What would be the idiomatic way to prevent this and completely drain the result channel?
Here is a minmal example which sometimes prints one 0 but should always print two of them: package main import ( "fmt" ) func do(rc chan<- int, dc chan<- bool) { rc <- 0 dc <- true } func main() { worker := 2 rc := make(chan int, worker) done := 0 dc := make(chan bool, worker) for i := 0; i < worker; i++ { go do(rc, dc) } for done < worker { select { case <-dc: done++ case r := <-rc: fmt.Println(r) } } } many thanks Chris -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.