從作用域之外跳出帶標籤的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中文網其他相關文章!