Skip to main content

defer recover 类似 try catch

defer:recover 类似 try catch

在 Go 中,deferrecover 的组合可以实现类似于其他语言中的 try-catch 异常处理机制,但它们的工作方式和目的略有不同。

工作原理

  • defer:用于延迟函数的执行,直到包含它的函数返回。常用于清理资源。

  • panic:用于引发异常,通常在遇到无法恢复的错误时使用。

  • recover:用于从 panic 中恢复,使程序继续运行。只能在被 defer 的函数中调用。

类似点

  • 异常处理deferrecover 可以捕获并处理运行时异常,类似于 try-catch

不同点

  • 控制流:Go 的异常处理通过 panicrecover 控制,而不是使用结构化的 try-catch 块。
  • 用法建议:Go 更倾向于通过返回错误值来进行错误处理,而不是使用 panicrecover 进行常规错误处理。

示例

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 的行为。