recover必须在defer中调用,用于捕获同一goroutine内的panic,阻止程序崩溃并恢复执行,常用于Web中间件、解析器等场景以保证服务可用性,但不能跨goroutine生效,且不应滥用以避免状态不一致。

Go语言中的recover异常捕获机制,核心在于与defer和panic协同工作。它并非像其他语言的try-catch那样主动“监听”错误,而是一种在程序即将崩溃时进行“自救”的特殊手段。
recover是一个内建函数,它的唯一作用是让程序从panic(恐慌)状态中恢复。当一个函数内部或其调用链中发生panic时,正常的执行流程会被中断,函数开始逐层返回。在这个过程中,所有通过defer注册的延迟函数都会被依次执行。如果某个defer函数里调用了recover,并且此时程序正处于panic状态,那么recover就会生效,阻止程序继续崩溃,并将控制权交还给该函数,使其可以正常返回。
关键点在于:
recover主要用于处理那些不可预料的、严重的运行时错误,或者作为最后一道防线来保证服务的整体可用性。
立即学习“go语言免费学习笔记(深入)”;
func safeDivide(a, b int) (result int, err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("发生了panic: %v", r)
}
}()
result = a / b // 如果b为0,这里会panic
return result, nil
}尽管recover功能强大,但使用时必须非常谨慎,因为它可能会掩盖问题,导致程序处于不一致的状态。
以上就是Golang recover如何工作_Go recover异常捕获机制的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号