Windows 上的Goroutine 執行:靜默故障故障排除
涉及Goroutine 的簡單測試在Windows 上顯示出意外的行為,因為未產生預期的輸出。出現問題的原因是 main 函數在終止之前沒有等待 goroutine 完成。
Go Awaits
當使用「go」關鍵字啟動 goroutine 時,它與 main 函數同時執行。但是,main 函數的執行不會暫停並等待呼叫的 goroutine 完成。因此,main 函數退出,可能導致 goroutine 無法調度。
補救措施
為了確保 goroutine 有機會執行並列印其輸出, main必須修改函數等待一段時間。這可以使用“time”套件和“Sleep”函數來實現。透過引入睡眠時間,主函數讓 goroutine 有機會在終止之前運行並產生輸出。
修改後的程式碼
以下修改後的程式碼透過以下方式解決了該問題在main函數末尾添加10秒的睡眠時間:
package main
import (
"fmt"
"time"
)
func test() {
fmt.Println("test")
}
func main() {
go test()
time.Sleep(10 * time.Second)
}
輸出
修改後的程式碼現在產生預期的輸出:
test
此修改允許main 函數等待啟動goroutine 後,在程式終止之前給它足夠的時間執行並列印「test」訊息。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3