defer recover 类似 try catch
defer:recover 类似 try catch
在 Go 中,defer 和 recover 的组合可以实现类似于其他语言中的 try-catch 异常处理机制,但它们的工作方式和目的略有不同。
工作原理
-
defer:用于延迟函数的执行,直到包含它的函数返回。常用于清理资源。
-
panic:用于引发异常,通常在遇到无法恢复的错误时使用。
-
recover:用于从
panic中恢复,使程序继续运行。只能在被defer的函数中调用。
类似 点
- 异常处理:
defer和recover可以捕获并处理运行时异常,类似于try-catch。
不同点
- 控制流:Go 的异常处理通过
panic和recover控制,而不是使用结构化的try-catch块。 - 用法建议:Go 更倾向于通过返回错误值来进行错误处理,而不是使用
panic和recover进行常规错误处理。
示例
package main
import "fmt"
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from:", r)
}
}()
fmt.Println("Starting")
panic("Something went wrong!")
fmt.Println("This will not be printed")
}
在这个例子中,recover 捕获了 panic 引发的异常,避免程序崩溃,类似于 try-catch 的行为。