答案:panic用于触发异常,recover用于捕获并恢复,二者配合可在defer中处理严重错误。当panic被调用时,函数停止执行并触发defer,若defer中recover被调用且存在panic,则返回panic值,程序恢复执行;否则程序崩溃。常见于库函数保护、初始化失败和Web中间件等场景,但不应替代常规错误处理。每个goroutine需独立处理panic,recover仅在defer中有效。

在Golang中,panic 和 recover 是用于处理严重错误的机制,它们不是常规的错误处理方式(应优先使用 error 返回值),而是在程序遇到无法继续执行的异常情况时提供一种退出或恢复的手段。
当调用 panic 时,当前函数的执行会停止,并开始触发 defer 函数的执行。如果这些 defer 函数中没有调用 recover,程序会继续向上回溯,直到 goroutine 的栈被完全展开,最终导致整个程序崩溃。
常见触发 panic 的情况包括:
示例:
立即学习“go语言免费学习笔记(深入)”;
func examplePanic() {recover 是一个内置函数,只能在 defer 函数中有效。它能重新获得对 panic 流程的控制,并返回传递给 panic 的值。如果当前 goroutine 没有发生 panic,recover 返回 nil。
典型结构如下:
func safeRun() {在这个例子中,程序不会崩溃,而是打印 "Recovered: test panic",然后继续执行后续代码。
虽然不推荐滥用 panic/recover,但在某些场景下是合理的:
例如 Gin 框架中的 recovery 中间件就是基于此机制实现的。
使用 panic 和 recover 时需注意以下几点:
基本模式总结:
func protectedCall() {基本上就这些。合理使用 panic 和 recover 能提升程序健壮性,但切记它们是“最后手段”。
以上就是如何在Golang中使用panic和recover的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号