介绍一下panic和recover
if r := recover(); r != nil { fmt.Println("Recovered:", r)
} }()
panic("Something went wrong!")
}
func main() { example()
}
介绍一下panic和recover
panic 和 recover 是用于处理运行时错误和恢复程序执行的两个关键字。但是在一般情况下,Go语言更倾向于使用显式的错误处理,而不是依赖于 panic 和 recover。
- panic
panic 是一个内建函数,用于引发运行时错误,通常表示程序遇到了不可恢复的错误。
当程序执行到 panic 语句时,它会立即停止当前函数的执行,并沿着函数调用栈向上搜寻,执行每个被调用函数的 defer 延迟函数(如果有的话),然后程序终止。
panic 通常用于表示程序遇到了一些致命错误,例如切片越界、除以零等。
func example() { panic("Something went wrong!")
}
func main() { example()
}
- 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代码随想录知识星球精华(最强八股文)第五版(Go篇))
- 2Go string 和 []byte 的区别
- 3数组和切片的区别
- 4扩容前后的Slice是一样的吗
- 5Go语言map是有序的还是无序的, 为什么
- 6go里面的map是并发安全的吗?如何并发安全
- 7Go 的错误处理和 Java 的异常处理对比
- 8介绍一下panic和recover
- 9什么是defer?有什么作用
- 10Go并发
- 11进程、线程的区别
- 12什么是go runtine
- 13Go语言中的Channel是什么, 有哪些用途,如何处理阻塞
- 14什么是互斥锁(mutex)?在什么情况下会用到它们?
- 15Mutex有几种模式
- 16goroutine什么情况会发生内存泄漏?如何避免。
- 17Go语言中GC的流程是什么
- 18Go 中的内存逃逸现象是什么?
- 19CAP 理论,为什么不能同时满足
- 20说一下 Gin 的路由怎么实现的
- 21简述slice的底层原理,和数组的区别是什么
- 22defer底层原理
- 23侵入式和非侵入式的区别
- 24goroutine与线程的区别
- 25goroutine在什么情况下会被挂起呢?
- 26GC(垃圾回收)原理 1.5版本
- 27简述Go的垃圾回收机制
- 28协程优势及其通信方式
- 29Go的内存对齐