Go语言-panic和recover使用实战
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,panic正常的函数执行流程将立即终止,但函数中之前使用defer关键字延迟执行的语句将正常展开执行,之后该函数将返回到调用函数,并导致逐层向上执行panic()流程,直到所属的goroutine中所
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
手冲咖啡和咖啡机区别
南京欣网互联网络科技有限公司
凡科互联网科技
壹账通互联网科技
互联网科技logo
深圳艾佳互联网科技
国外互联网科技网站
互联网 科技服务平台
中国互联网金融科技基金
美国互联网前沿科技
老年人脱离互联网科技的作文
互联网校园科技培训
互联网科技有哪些公司
互联网科技公司有风险吗
广州市恰铎互联网科技有限公司
互联网科技研发水平
科技大学互联网
卡尔迅互联网科技有限公司
东营紫格互联网科技
互联网科技创新方面的资料
中国 科技 互联网
碳银互联网科技
凡科互联网科技
长亮科技互联网金融
科技类的互联网平台
安控科技rtu产品工业互联网
互联网科技实习生岗位职责
宁夏众和广鑫互联网科技有限公司
互联网科技年终奖
亚光科技低轨卫星互联网