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")
}

Ответы на вопрос(8)

Ваш ответ на вопрос