Golang 第五章 9.panic
panic 用于 引发运行时错误,通常表示程序遇到不可恢复的严重问题。
类似其他语言的“抛出异常”
通常在程序遇到逻辑错误或不可恢复条件时使用
基本用法
func main() {
panic("发生严重错误")
}输出示例:
panic: 发生严重错误程序会打印堆栈信息
然后退出程序
defer 与 panic
defer 语句 在 panic 发生时仍会执行:
func f() {
defer fmt.Println("defer 执行")
panic("错误发生")
}
func main() {
f()
}输出:
defer 执行
panic: 错误发生defer 用于清理资源,即使发生 panic
panic 的调用场景
程序逻辑错误:
if x < 0 {
panic("x 不能为负数")
}不可恢复的情况:
内存不足
数据损坏
栈溢出(runtime 会自动 panic)
panic 与 recover(配合使用)
recover 可以 捕获 panic 并恢复程序
必须在 defer 中调用 recover
示例:
func f() {
defer func() {
if r := recover(); r != nil {
fmt.Println("捕获 panic:", r)
}
}()
panic("发生错误")
}
func main() {
f()
fmt.Println("程序继续运行")
}输出:
捕获 panic: 发生错误
程序继续运行recover 返回 panic 的值
如果没有 panic,recover 返回 nil
注意事项
panic 通常 不用于普通错误,普通错误应使用返回值 error
recover 只能在 defer 中有效
避免滥用 panic,保持程序稳定
v2ray节点购买


评论