我在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) }
2 回答
天涯尽头无女友
TA贡献1831条经验 获得超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.
繁星coding
TA贡献1797条经验 获得超4个赞
正如@StephenWeinberg指出的那样,go中没有pass语句。只需简单地放置任何东西,以防频道碰到某些东西。
select {
case <-ch:
// do something
case <-time.After(2*time.Second):
// timeout
default:
// do nothing aka pass
}
- 2 回答
- 0 关注
- 640 浏览
添加回答
举报
0/150
提交
取消