当前位置: 首页 > wzjs >正文

网站收录方法分类信息网站开发

网站收录方法,分类信息网站开发,在门户网站中营销者通过制作什么,淘宝客wordpress引流文章目录 panic基本概念使用场景与error对比 recover基本概念使用方法工作原理执行流程 总结何时使用panic何时使用recover 相关好文推荐(纯推荐,如有侵权,请告知) panic和recover是Go语言中用于处理程序异常情况的机制&#xff0…

文章目录

  • panic
    • 基本概念
    • 使用场景
    • 与error对比
  • recover
    • 基本概念
    • 使用方法
    • 工作原理
    • 执行流程
  • 总结
    • 何时使用panic
    • 何时使用recover
  • 相关好文推荐(纯推荐,如有侵权,请告知)

panic和recover是Go语言中用于处理程序异常情况的机制,与传统的try-catch异常处理不同,Go更推荐使用error返回值来处理可预期的错误,而panic/recover主要用于处理不可恢复的错误或程序中的严重问题。
有些资料会讲这些处理称为自定义错误处理。

panic

基本概念

panic是Go语言的内置函数,用于(主动调用)引发运行时恐慌(类似其他语言的抛出异常),可终止当前 goroutine 的正常执行流程。当函数调用panic时:

1、当前函数的执行立即停止,Panic后的函数不再执行。

2、所有defer语句会按照后进先出的顺序执行(如果存在defer语句的话)。

3、程序会回溯调用栈,直到被recover捕获或程序崩溃。

4、如果直至主函数main仍未捕获panic,程序将打印错误信息、堆栈跟踪,并以非零状态码退出。

使用场景

func main() {fmt.Println("程序开始")panic("发生了严重错误") // 触发panicfmt.Println("这行不会执行") // 不会执行
}// 输出
程序开始
panic: 发生了严重错误goroutine 1 [running]:
main.main()/tmp/sandbox123456/main.go:7 +0x95

与error对比

特性panicerror
用途不可恢复的严重错误预期的、可处理的错误情况
传播方式自动向上传播调用栈需要通过返回值显式传递
处理方式必须用recover捕获通过if err != nil检查处理
适用场景程序无法继续执行的严重问题正常的错误处理流程

recover

基本概念

recover是Go语言的内置函数,用于捕获panic并恢复程序执行。recover只有在defer函数中调用才有效。

使用方法

func mayPanic() {panic("出问题了!")
}func main() {defer func() {if r := recover(); r != nil {fmt.Println("恢复panic:", r)}}()mayPanic()fmt.Println("这行会在recover后执行") // 不会执行
}// 输出
恢复panic: 出问题了!

工作原理

1、recover只有在defer函数中调用才能捕获panic。

2、recover会返回panic传递的值。

3、如果当前goroutine没有发生panic,recover返回nil。

4、recover捕获panic后,程序会从recover调用点之后继续执行。

执行流程

1、panic触发时:

当前函数的执行立即停止,开始执行该goroutine的defer栈(后进先出)。

2、recover捕获:在defer函数中调用recover会捕获panic,recover返回panic传递的值,panic被处理后,程序控制流不会回到panic发生的位置。

3、程序继续执行的位置:recover后,程序会从当前函数(main)的defer之后继续执行,不会回到Painc调用后的位置。

总结

何时使用panic

1、不可恢复的错误:如数据库连接失败导致程序无法继续。

2、程序员的错误:如API被错误调用,传入非法参数。

3、启动时依赖不满足:如配置文件缺失或格式错误。

何时使用recover

1、防止程序崩溃:如HTTP服务器中单个请求处理失败不应导致整个服务崩溃。

2、资源清理:确保在panic发生时释放锁、关闭文件等。

3、日志记录:记录panic信息用于调试。

相关好文推荐(纯推荐,如有侵权,请告知)

基础文章:
Go 语言中的 Panic:处理不可恢复错误的紧急机制
进阶学习:
深入理解 Go 语言中的 Panic 机制


文章转载自:

http://TyBZ6F8j.crsqs.cn
http://TUNMkF3D.crsqs.cn
http://oyGr4NSL.crsqs.cn
http://IY5xMgIN.crsqs.cn
http://nIdMmoIF.crsqs.cn
http://4ytq9WUH.crsqs.cn
http://95u3HiYe.crsqs.cn
http://5FWcWzBR.crsqs.cn
http://FhGNwHPV.crsqs.cn
http://xXBqpcZJ.crsqs.cn
http://fwEp52mx.crsqs.cn
http://a26dInUn.crsqs.cn
http://mUpxEPr5.crsqs.cn
http://vaUKsI61.crsqs.cn
http://sRfEM3kL.crsqs.cn
http://LRilJHCd.crsqs.cn
http://cf6Iwqz1.crsqs.cn
http://OsxRuJLk.crsqs.cn
http://oQbRuEDf.crsqs.cn
http://skX85FrT.crsqs.cn
http://ojCKkxBK.crsqs.cn
http://8Vq7kfgj.crsqs.cn
http://X4VhS3v5.crsqs.cn
http://2AwouVRI.crsqs.cn
http://wxqcz5lF.crsqs.cn
http://MyfKf1RC.crsqs.cn
http://N60d7dT7.crsqs.cn
http://KrPCHz05.crsqs.cn
http://qcJPCz6s.crsqs.cn
http://PUokDCyX.crsqs.cn
http://www.dtcms.com/wzjs/775306.html

相关文章:

  • 邹城网站定制wordpress重置密碼
  • 织梦做的网站好优化青岛网页设计师
  • ace网站建设wordpress视频播放插件下载
  • 天河区做网站公司网页设计100个方法
  • 互助平台网站建设h5海报制作软件推荐
  • 头条搜索站长平台域名查询ip解析
  • 做网站的服务器cpu异常wordpress主题实例制作
  • 成都网站制作培训焦作网站建设哪家好
  • 制作企业网站的基本步骤外贸业务员如何寻找国外客户
  • 网站建设的进度表如何制作网站策划书
  • 临沂做四维和美家网站做网站的手机软件
  • 东莞网站系统找哪里dede做的网站被植入广告
  • 机关内网站建设方案书wordpress-erphpdown
  • 网站外部链接做多少合适呢华为荣耀官网入口
  • 网站建设招标无锡建设摩托车官网中国官网报价大全
  • 甘肃网站域名申请公司wordpress设置仅自己可见
  • 可以充值的网站怎么建设哪个平台可以免费发广告
  • 做静态网站有什么用商务信息网
  • 淘宝网站优惠券统一修改怎么做中国教育网站官网
  • 摄影网站cms浙江建筑网站
  • 大学毕业做网站插画师好吗手机表格制作软件
  • 怎么把源码做网站WordPress 前台 注册用户 插件
  • 浙江省建设局房管科网站百度一下百度官方网
  • 个人网站建设需要备案吗重庆百度推广优化排名
  • 网站建设的风险番禺网站开发哪家专业
  • 全国二级建造师注册信息查询网站曲阜网站建设价格
  • 德州网站建设价格沧州做网站哪家公司好
  • 网站建设公司推来客网站系统怎么样网站个人备案流程
  • 绵阳的网站制作公司access 网站后台
  • 广东网广东网站建设关于网站建设广告词