在 HTTP 處理程序內執行 Goroutine 時,很自然地想知道回應返回後它是否會繼續執行。考慮以下範例程式碼:
package main import ( "fmt" "net/http" "time" ) func worker() { fmt.Println("worker started") time.Sleep(time.Second * 10) fmt.Println("worker completed") } func HomeHandler(w http.ResponseWriter, r *http.Request) { go worker() w.Write([]byte("Hello, World!")) } func main() { http.HandleFunc("/home", HomeHandler) http.ListenAndServe(":8081", nil) }
此程式碼在 HomeHandler 中啟動一個 goroutine,該 goroutine 在列印完成之前休眠 10 秒。一旦寫入回應,主協程就會從 HomeHandler 函數傳回。
在這個特定場景中,goroutine 確實會完成其執行,列印語句「worker開始」和「工作人員已完成」到控制台。這是因為:
在這種情況下提前終止goroutine 的唯一方法就是遇到不穩定的狀態,例如正在運行記憶體不足,或者使用同步技術明確停止goroutine(本程式碼範例中未涵蓋) 。
以上是HTTP 回應傳送後我的 Goroutine 會完成嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!