2012-09-17 24 views
8

我有,我想要做什么,只是继续select语句默认的原因,但留行空的发生Go - 什么是Python的“通行证”的等价物?

 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

您是否尝试过完全移除默认声明? –

+0

难道你不能完全忽略'default'子句吗? – verdesmarald

回答

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. 
+4

没有理由在另一个goroutine中运行它。你可以把'default:'放在下一行关闭select语句。 “通行证”的版本就是什么都不做。 –

相关问题