為什麼我的 Goroutine 沒有運行?
在 Go 程式設計領域,goroutine 提供了強大的並發執行機制。然而,有時這些 goroutine 可能看起來沒有回應,讓開發人員陷入困惑。
場景:
考慮以下Go 程式碼,它嘗試建立一個goroutine 並發送透過通道傳送訊息:
<code class="go">package main import "fmt" func main(){ messages := make(chan string,3) messages <- "one" messages <- "two" messages <- "three" go func(m *chan string) { fmt.Println("Entering the goroutine...") for { fmt.Println(<- *m) } }(&messages) fmt.Println("Done!") }</code>
執行此程式碼時,輸出可能會令人驚訝:
Done!
問題:
儘管創建一個goroutine 時,程式碼永遠不會執行其中的語句。原因在於主程式的終止。在 Go 中,goroutines 獨立於 main 函數運行。一旦主程式退出,所有正在運行的 goroutine 都會被終止,即使它們還沒有機會執行。
解決方案:
為了防止為了防止 goroutine 過早終止,主程式必須保持活動狀態,直到 goroutine 完成其工作。有幾種方法可以實現這一點:
推薦:
為了更全面地了解goroutine 的行為和並發性Go,強烈建議閱讀Golang 博客上的優秀博文:《Go 中的並發》
以上是為什麼我的 Goroutine 在執行前就終止?的詳細內容。更多資訊請關注PHP中文網其他相關文章!