go中的非阻塞通道

Non-blocking channel in go

我有一些这样的代码:

go func(ch chan bool) chan bool {

    // some processing
    ch <- true
    return ch
}(ch)

for i := 0; i < TotalQuestions; i++ {
    // check if channel ch has some value
    // If it has then execute below statements, else break out of the loop


    fmt.Println(questions[i])
    answer, _ := InputReader.ReadString('\n')

    // some processing

}
fmt.Println("Your Total score is " + strconv.Itoa(TotalScore) + " out of " + strconv.Itoa(TotalQuestions))

现在我要做的是检查通道 ch 是否有值(在 for 循环中)。如果它有一个值,那么我想跳出 for 循环来打印最后一条语句。否则,我想继续我的循环。我尝试插入 select 块,但没有用(通道被阻塞,代码没有打印问题)。怎么做?

package main
    
import (
    "fmt"
    "log"
    "math/rand"
    "time"
)

func main() {

    // user score, no.of questions asked so far
    var score, num int
    var correct bool // temporary variable to decide if the answer is right
    // questions
    var questions = make([]string, 13)

    t1 := time.Tick(time.Second * 7) // timer loop:
    for {
        select {
        case <-t1:
            log.Println("ran out of time")
            break loop
        default:
            // have any questions further questions to ask
            if num < len(questions) {

                // simulate typing
                time.Sleep(time.Millisecond * 777)

                // correct or wrong answer
                correct = (rand.Intn(777)%2 == 0)

                if correct {
                    fmt.Println("you did it")
                    score++ //increase score
                } else {
                    fmt.Println("try again")
                }

            } else {
                // no questions, state and break
                log.Println("all questions were finished")
                break loop //break loop, all questions were finished
            }
            num++
        }
    }

    //print final score
    fmt.Println("your score is:", score)
}