从作用域之外跳出带标签的 For 循环
在 Go 中,从以下代码中断带标签的 for 循环可能会很困难:存在于循环范围之外。当使用 go 例程执行周期性任务并希望根据某些条件终止循环时,这种情况很常见。
解决方案:
为了实现这一点,我们可以使用一个信令通道。操作方法如下:
<code class="go">quit := make(chan struct{})</code>
struct{}{} 类型的通道用于发送一个信号表明循环应该中断。此通道是在循环范围之外创建的。
当满足中断循环的条件时,我们关闭通道:
<code class="go">close(quit)</code>
通过关闭通道,我们发出信号表明 go 例程应该终止。
在标记的 for 循环内部,合并一条 select 语句来监听来自通道的信号:
<code class="go">myLoop: for { select { case <-quit: break myLoop default: // Continue looping } }
当 quit 通道关闭时,select 语句检测到并执行break语句,有效地跳出循环。
<code class="go">go func (){ for { // Loop continues until count > 5 or quit channel is closed fmt.Println("I will print every second", count) count++ if count > 5 { close(quit) wg.Done() return } <-t.C } }()</code>
在此 go 例程中,不需要 select 语句,因为循环已经作为 go 例程运行,不需要阻塞。
通过执行以下步骤,您可以从循环范围之外跳出带标签的 for 循环使用信号通道。
以上是在 Go 中,如何从其范围之外跳出带标签的 for 循环?的详细内容。更多信息请关注PHP中文网其他相关文章!