在Windows 上診斷非執行Goroutine
為了深入研究Goroutine 的複雜性,進行了一個簡化的測試來觀察它們的情況行為。然而,「測試」的預期結果從未實現。儘管包含了 for {} 循環來為 goroutine 提供充足的時間,但程式仍然保持沉默,沒有留下任何錯誤或成功的痕跡。
揭開問題
經過仔細檢查,很明顯問題的癥結在於 goroutine 的非同步性質。與以阻塞方式順序執行的傳統執行緒不同,goroutine 被設計為並發運行,不會阻礙主程式的執行。因此,程式執行不會暫停以適應呼叫函數的完成。
解決難題
為了糾正這種情況並允許正確觀察 goroutine 的輸出,需要一個時間可以引入.Sleep()語句。該語句將 main 函數的執行暫停指定的持續時間,為 goroutine 完成其工作提供足夠的時間。透過將持續時間設為非零值,例如 10 秒,goroutine 有足夠的機會在主函數終止之前執行和列印其輸出。
改進的測試案例
修改後的測試案例合併了time.Sleep() 語句,如下所示:
<code class="go">package main import ( "fmt" "time" ) func test() { fmt.Println("test") } func main() { go test() time.Sleep(10 * time.Second) }</code>
通過此修改,程式現在成功執行test() goroutine 並將「test」印到安慰。這種方法確保 main 函數在終止之前等待 goroutine 完成,可以對其行為進行可見觀察。
以上是為什麼我的 Goroutine 在 Windows 上不執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!