← 返回目录

介绍一下panic和recover

第 8 / 29 卷日期:

if r := recover(); r != nil { fmt.Println("Recovered:", r)

} }()

panic("Something went wrong!")

}

func main() { example()

}

介绍一下panic和recover

panic 和 recover 是用于处理运行时错误和恢复程序执行的两个关键字。但是在一般情况下,Go语言更倾向于使用显式的错误处理,而不是依赖于 panic 和 recover。

  1. panic

panic 是一个内建函数,用于引发运行时错误,通常表示程序遇到了不可恢复的错误。

当程序执行到 panic 语句时,它会立即停止当前函数的执行,并沿着函数调用栈向上搜寻,执行每个被调用函数的 defer 延迟函数(如果有的话),然后程序终止。

panic 通常用于表示程序遇到了一些致命错误,例如切片越界、除以零等。

func example() { panic("Something went wrong!")

}

func main() { example()

}

  1. recover

recover 是一个内建函数,用于从 panic 引发的运行时错误中进行恢复。

recover 只能在 defer 延迟函数中使用,用于捕获 panic 的值,并防止程序因 panic 而崩溃。

如果在 defer 函数中调用了 recover,并且程序处于 panic 状态,那么 recover 将返回 panic 的值,并且程序会从 panic 的地方继续执行。

func example() { defer func() {

if r := recover(); r != nil { fmt.Println("Recovered:", r)

} }()

全站分卷索引 · 29 卷
  1. 1代码随想录知识星球精华(最强八股文)第五版(Go篇))
  2. 2Go string 和 []byte 的区别
  3. 3数组和切片的区别
  4. 4扩容前后的Slice是一样的吗
  5. 5Go语言map是有序的还是无序的, 为什么
  6. 6go里面的map是并发安全的吗?如何并发安全
  7. 7Go 的错误处理和 Java 的异常处理对比
  8. 8介绍一下panic和recover
  9. 9什么是defer?有什么作用
  10. 10Go并发
  11. 11进程、线程的区别
  12. 12什么是go runtine
  13. 13Go语言中的Channel是什么, 有哪些用途,如何处理阻塞
  14. 14什么是互斥锁(mutex)?在什么情况下会用到它们?
  15. 15Mutex有几种模式
  16. 16goroutine什么情况会发生内存泄漏?如何避免。
  17. 17Go语言中GC的流程是什么
  18. 18Go 中的内存逃逸现象是什么?
  19. 19CAP 理论,为什么不能同时满足
  20. 20说一下 Gin 的路由怎么实现的
  21. 21简述slice的底层原理,和数组的区别是什么
  22. 22defer底层原理
  23. 23侵入式和非侵入式的区别
  24. 24goroutine与线程的区别
  25. 25goroutine在什么情况下会被挂起呢?
  26. 26GC(垃圾回收)原理 1.5版本
  27. 27简述Go的垃圾回收机制
  28. 28协程优势及其通信方式
  29. 29Go的内存对齐