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