我在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)
}
Run Code Online (Sandbox Code Playgroud)
所述default的情况下select声明旨在提供非阻塞I/O信道读取和写入.default只要任何情况下的通道都没有准备好被读/写,就执行该情况下的代码.
因此,在您的情况下,default如果退出通道无话可说,则执行该块.您可以简单地删除默认情况,它将阻止quit_status := <-quit案例,直到...中的值可用quit.这可能是您在此实例中所追求的.
如果要在select语句后立即继续执行代码,则应在单独的goroutine中运行此select语句:
go func() {
select {
case quit_status := <-quit:
...
}
}()
// Execution continues here immediately.
Run Code Online (Sandbox Code Playgroud)