首页  >  文章  >  后端开发  >  在 Go 中,如何从其范围之外跳出带标签的 for 循环?

在 Go 中,如何从其范围之外跳出带标签的 for 循环?

Patricia Arquette
Patricia Arquette原创
2024-10-27 03:27:02356浏览

How can I break out of a labeled for loop from outside its scope in Go?

从作用域之外跳出带标签的 For 循环

在 Go 中,从以下代码中断带标签的 for 循环可能会很困难:存在于循环范围之外。当使用 go 例程执行周期性任务并希望根据某些条件终止循环时,这种情况很常见。

解决方案:

为了实现这一点,我们可以使用一个信令通道。操作方法如下:

  1. 创建一个信令通道:
<code class="go">quit := make(chan struct{})</code>

struct{}{} 类型的通道用于发送一个信号表明循环应该中断。此通道是在循环范围之外创建的。

  1. 关闭信号中断通道:

当满足中断循环的条件时,我们关闭通道:

<code class="go">close(quit)</code>

通过关闭通道,我们发出信号表明 go 例程应该终止。

  1. 使用 Select 语句修改 For 循环:

在标记的 for 循环内部,合并一条 select 语句来监听来自通道的信号:

<code class="go">myLoop:
  for {
    select {
    case <-quit:
      break myLoop
    default:
      // Continue looping
    }
  }

当 quit 通道关闭时,select 语句检测到并执行break语句,有效地跳出循环。

  1. 调用 Go 例程:
<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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn