recover Go · 内置功能
捕获当前 goroutine 的 panic 并恢复执行,让程序不崩溃;必须放在 defer 里才有效。
怎么用
在 defer 函数中写 if r := recover(); r != nil { ... }
小例子
package main
import "fmt"
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("恢复了", r)
}
}()
panic("出事")
}
运行结果
输出 恢复了 出事
提醒:recover 只在当前 goroutine 的 defer 中有效,不能捕获其它 goroutine 的 panic
在代码里遇到不认识的词?打开代码点读机,点一下就懂 → ← Go全部词条