Go 中從外部停止For 迴圈的執行
在Go 中,你可能會遇到需要終止for 迴圈執行的場景來自其範圍之外。例如,您可能有一個長時間運行的循環,需要在滿足特定條件時中斷。
要實現此目的,您可以利用訊號通道。它的工作原理如下:
建立訊號通道
<code class="go">quit := make(chan struct{}{})</code>
此行建立一個以空結構體作為其值類型的通道。它將用於指示循環停止。
關閉Channel
在運行循環的Goroutine 中,您可以使用close 函數來關閉Channel當滿足所需條件時發送信號通道:
<code class="go">if count > 5 { close(quit) wg.Done() return }</code>
從關閉的通道讀取
當退出通道關閉時,從中讀取立即返回零價值。此行為在外循環中被利用。預設情況下,從關閉的通道讀取資料會無限期阻塞。但是,可以使用 select 語句來避免這種情況:
<code class="go">myLoop: for { select { case <-quit: break myLoop default: fmt.Println("iteration", i) i++ } }</code>
在此 select 語句中,預設情況會如預期地繼續循環迭代。當退出通道關閉時,滿足第一種情況,導致循環立即中斷。
透過使用訊號通道,您可以在必要時有效地停止外部函數或 goroutine 的 for 迴圈的執行,確保更大的靈活性和對程式碼執行的控制。
以上是如何從外部停止 Go For 迴圈?的詳細內容。更多資訊請關注PHP中文網其他相關文章!