【发布时间】:2021-04-05 23:30:31
【问题描述】:
我正在尝试通过在线学习不同的示例来学习 goLang。在这个示例中,它是一个测验测试,其中向用户提供带有问题和答案的 CSV 文件,如果用户在给定时间内未回答 Q,则计时器将触发。我在下面的代码中不明白为什么我们每次都在 for 循环中为每个不同的问题创建答案通道。为什么我们不能在 for 循环之外定义计时器并将其用于每个问题,这不是低效的编码吗?
problemloop:
for i, p := range problems {
fmt.Printf("Problem #%d: %s = ", i+1, p.q)
answerCh := make(chan string)
go func() {
var answer string
fmt.Scanf("%s\n", &answer)
answerCh <- answer
}()
select {
case <-timer.C:
fmt.Println()
break problemloop
case answer := <-answerCh:
if answer == p.a {
correct++
}
}
}
【问题讨论】:
标签: go