Go语言-panic和recover使用实战
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,panic正常的函数执行流程将立即终止,但函数中之前使用defer关键字延迟执行的语句将正常展开执行,之后该函数将返回到调用函数,并导致逐层向上执行panic()流程,直到所属的goroutine中所
千家信息网最后更新 2025年12月03日Go语言-panic和recover使用实战
panic
正常的函数执行流程将立即终止,但函数中之前使用defer关键字延迟执行的语句将正常展开执行,之后该函数将返回到调用函数,并导致逐层向上执行panic()流程,直到所属的goroutine中所有正在执行的函数将被终止。错误信息将被报告,包括panic()的参数类型interface()我们可以看到,panic可以接收任意类型的数据
panic(404)
panic("network borken")
panic("Error("file not exists")
recover
recover函数用于终止错误处理流程。recover应该在defer关键字的函数中执行以有效截取错误处理流程
实例1
package mainimport ( "fmt")func main() { defer func() { if r := recover(); r != nil { fmt.Println("detail:", r) } }() fmt.Println("before painc") panic("error1") panic("error2") fmt.Println("after panic") return}运行结果
before paincdetail: error1实例2
package mainimport ( "fmt")func main() { fmt.Println("before painc") panic("error1") panic("error2") fmt.Println("after panic") return}运行结果
before paincpanic: error1goroutine 1 [running]:main.main() /home/kenmy/go/src/github.com/shadowsocks/shadowsocks-go/sample-config/panic.go:17 +0xdd实例3
package mainimport ( "fmt")func main() { defer func() { if r := recover(); r != nil { fmt.Println("detail:", r) } }() test() fmt.Println("end") return}func test() { defer func() { if r := recover(); r != nil { fmt.Println("detail0:", r) } }() fmt.Println("before painc") panic("error1") panic("error2") fmt.Println("after panic")}运行结果
before paincdetail0: error1end实例4
package mainimport ( "fmt")func main() { defer func() { if r := recover(); r != nil { fmt.Println("detail:", r) } }() test() fmt.Println("middle") panic("error3") fmt.Println("end") return}func test() { defer func() { if r := recover(); r != nil { fmt.Println("detail0:", r) } }() fmt.Println("before painc") panic("error1") panic("error2") fmt.Println("after panic")}运行结果
before paincdetail0: error1middledetail: error3实例5
package mainimport ( "fmt")func main() { test() fmt.Println("middle") panic("error3") fmt.Println("end") return}func test() { fmt.Println("before painc") panic("error1") panic("error2") fmt.Println("after panic")}运行结果:
before paincpanic: error1goroutine 1 [running]:main.test() /home/kenmy/go/src/github.com/shadowsocks/shadowsocks-go/sample-config/panic.go:20 +0xddmain.main() /home/kenmy/go/src/github.com/shadowsocks/shadowsocks-go/sample-config/panic.go:10 +0x26
函数
实例
结果
运行
流程
错误
关键
关键字
类型
处理
有效
信息
参数
所属
报告
数据
正在
语句
延迟
实战
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
个人如何提高网络安全意识
萍乡新成立网络安全办
服务器视频存储方案
完美电竞平台服务器异常
体育人群数据库如何变现
乐视1s服务器连接
ibm服务器销售渠道
大型银行网络安全架构
数据库配置工具.exe
eclipese导入数据库
服务器断网拼音
行政法里有网络安全法吗
手机导航app软件开发
vba怎么网问云端数据库
游戏厅软件开发
软件开发具体职位
浙江盘位机架式服务器云空间
单位成立网络安全工作机构
网络安全 手机
如何启动DBC数据库
影视视频服务器
超微服务器主板接线图解
服务器内存怎么提高
衣二三网络技术有限公司
网络安全进军营致辞
php数据库读写分离概念
河北网络安全知识答题秦皇岛
百度文档 软件开发
高斯数据库如何获取表的建表语句
车牌识别系统数据库索引清理