我在select语句中有一个默认原因,我想什么都不做,只是继续,但是将该行留空会阻止语句中的任何内容发生
select {
case quit_status := <-quit:
if quit_status == true {
fmt.Printf("********************* GOROUTINE [%d] Received QUIT MSG\n", id)
return
}
default:
fmt.Printf("GOROUTINE [%d] step: %d, NO QUIT MSG\n", id, i)
}
答案 0 :(得分:9)
default
语句中的select
个案旨在为通道读写提供非阻塞I / O.只要任何一个案例中的通道都没有准备好被读/写,就会执行default
案例中的代码。
因此,在您的情况下,如果退出通道无话可说,则执行default
块。
您可以简单地删除默认情况,它将阻止quit_status := <-quit
情况,直到quit
中的值可用..这可能就是您在此实例中所追求的。
如果你想在select语句之后立即继续执行代码,你应该在一个单独的goroutine中运行这个select语句:
go func() {
select {
case quit_status := <-quit:
...
}
}()
// Execution continues here immediately.
答案 1 :(得分:0)
正如@StephenWeinberg指出的那样,go中没有pass语句。只需简单地在频道碰到东西的情况下什么也不做。
select {
case <-ch:
// do something
case <-time.After(2*time.Second):
// timeout
default:
// do nothing aka pass
}