首頁  >  文章  >  後端開發  >  在 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