Priority in Go выберите способ обхода оператора
Я хочу прослушивать два канала, заблокированные, когда оба канала опустошены. Однако, если оба канала содержат данные, я хочу, чтобы один из них был удален до обработки другого.
В рабочем примере ниже я желаю всемout
до слиexit
обрабатывается. Я используюselect
-статмент, который не имеет приоритетного порядка. Как я могу обойти проблему, заставив обработать все 10 выходных значений перед выходом?
package main
import "fmt"
func sender(out chan int, exit chan bool){
for i := 1; i <= 10; i++ {
out <- i
}
exit <- true
}
func main(){
out := make(chan int, 10)
exit := make(chan bool)
go, sender(out, exit)
L:
for {
select {
case i := <-out:
fmt.Printf("Value: %d\n", i)
case <-exit:
fmt.Println("Exiting")
break L
}
}
fmt.Println("Did we get all 10? Most likely not")
}