原文地址:http://www.niu12.com/article/14
panic知识点
package main import (
"fmt"
"github.com/pkg/errors"
) func main() {
outerFunc()
fmt.Println(1)
} func outerFunc() {
innerFunc()
} func innerFunc() {
panic(errors.New("An intended fatal error"))
} 当调用innerFunc 函数中的panic函数后,innerFunc 的执行会被停止。
紧接着,流程控制权会交回给调用方outerFunc函数。
然后, outerFunc函数的执行也将被停止。运行时恐慌就这样沿着调用栈反方向进行传播,
直至到达当前goroutine的调用栈的最顶层。-旦达到顶层,就意味着该goroutine调用栈
中所有函数的执行都已经被停止了,程序已经崩溃。
GO运行时系统也会调用panic() 函数
recover
运行时恐慌一旦被引发,就会向调用方传播直至程序崩溃。 Go 提供了专用于“拦截”
运行时恐慌的内建函数 recover ,它可以使气前的程序从恐慌状态中恢复并重新获
得流程控制权。 recover 函数被调川后,会返回一个 interfaoe { }类型的结果、
如果当时的程序正处于运行时恐慌的状态,那么这个结果就会是非 nil 的。 func innerFunc() {
defer func() {
if p := recover(); p != nil {
fmt.Printf("Recovered panic:%s\n", p)
}
}()
panic(errors.New("An intended fatal error"))
}
将defer 匿名函数放在函数体的开始处,可以有效防止该函数及其下层调用中的代码引发运行时恐慌 口可以把运行时恐慌的携带值转换为error类型值,并当作常规结果返回给调用方。
这样既阻止了恐慌的扩散,又传递了引起恐慌的原因。
口检查运行时恐慌携带值的类型,并根据类型做不同的后续动作,这样可以精确地
控制程序的错误处理行为。
  

golang错误处理机制:panic与recover的更多相关文章

  1. panic和recover的使用规则

    转自个人博客 chinazt.cc 在上一节中,我们介绍了defer的使用. 这一节中,我们温习一下panic和recover的使用规则. 在golang当中不存在tye ... catch 异常处理 ...

  2. GOLANG错误处理最佳方案errors wrap, Defer, Panic, and Recover

    Simple error handling primitives:        https://github.com/pkg/errors Defer, Panic, and Recover:    ...

  3. Golang错误处理函数defer、panic、recover、errors.New介绍

    在默认情况下,当发生错误(panic)后,程序就会终止运行 如果发生错误后,可以捕获错误,并通知管理人员(邮件或者短信),程序还可以继续运行,这当然无可厚非 errors.New("错误信息 ...

  4. 【GoLang】panic defer recover 深入理解

    唉,只能说C程序员可以接受go的错误设计,相比java来说这个设计真的很差劲! 我认为知乎上说的比较中肯的: 1. The key lesson, however, is that errors ar ...

  5. GO_05_2:Golang 中 panic、recover、defer 的用法

     函数 defer 1. 它的执行方式类似其他语言中的折构函数,在函数体执行结束后按照调用顺序的 相反顺序 逐个执行 2. 即使函数发生 严重错误 也会被执行,类似于 java 中 try{...} ...

  6. Golang异常处理-panic与recover

    Golang异常处理-panic与recover 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在程序设计中,容错是相当重要的一部分工作,在 Go中它是通过错误处理来实现的,err ...

  7. Golang 高效实践之defer、panic、recover实践

    前言 我们知道Golang处理异常是用error返回的方式,然后调用方根据error的值走不同的处理逻辑.但是,如果程序触发其他的严重异常,比如说数组越界,程序就要直接崩溃.Golang有没有一种异常 ...

  8. Golang 入门系列(十四)defer, panic和recover用法

    以前讲过golang 的基本语法.但是,只是讲了一些基础的语法,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/category/1275863 ...

  9. [Golang]-4 错误处理、Panic、Defer

    目录 错误和异常 案例 Panic Defer 使用 defer+recover 来处理错误 参考文章: Go 语言使用一个独立的·明确的返回值来传递错误信息的.这与使用异常的 Java 和 Ruby ...

随机推荐

  1. Java将CST的时间字符串转换成需要的日期格式字符串

    已知得到的Date类型的变量meettingdate 的值为Sun Dec 16 10:56:34 CST :现在要将它改为yyyy-MM-dd类型或yyyy年MM月dd日: 变为yyyy年MM月dd ...

  2. Oracle简述

    Oracle是甲骨文公司推出的一款大型数据库管理系统.甲骨文公司成立于1977年,总部位于美国加利福尼亚州的红木滩.1989年,Oracle正式进入中国市场:2013年,甲骨文超越 IBM ,成为继 ...

  3. mysql5.7 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

    mysql5.7初次登录使用提示 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before ...

  4. hdu 1428(很好的一道题,最短路+记忆化搜索)

    漫步校园 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. Find Peak Element——二分查找的变形

    A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ ...

  6. new、operator new、placement new

    首先我们区分下几个容易混淆的关键词: new.operator new.placement new new和delete操作符我们应该都用过,它们是对堆中的内存进行申请和释放,而这两个都是不能被重载的 ...

  7. Message Queue中的推与拉(转)

    Message Queue的设计和实现(7)http://mp.weixin.qq.com/s/zQdDBAHu1UgJJzxH2eCHgQ 数据发送中的推与拉. 当MQ要把数据给消费者的时候,就涉及 ...

  8. Ubuntu Nginx

    如果是阿云的ECS服务器,默认是已经安装了Apache服务器的,但一般都用不到,可以选择将它卸载 sudo service apache2 stop update-rc.d -f apache2 re ...

  9. IPV4网段划分

    IPV4的地址分类及网络号的范围如下: A类地址 (1)A类地址第1字节为网络地址,其它3个字节为主机地址. (2)A类地址范围:1.0.0.1—126.255.255.254 (3)A类地址中的私有 ...

  10. Ionic-wechat项目边开发边学(四):可伸缩输入框,下拉刷新, 置顶删除

    摘要 上一篇文章主要介绍了ion-list的使用, ion-popup的使用, 通过sass自定义样式, localStorage的使用, 自定义指令和服务. 这篇文章实现的功能有消息的置顶与删除, ...