Go语言核心36讲 day05 学习笔记

上篇文章我们分析了一个简单panic,中包含的东西, 而这篇文章我们就来仔细的去探讨panic传播的具体过程。

假如现在有一个函数A, 函数中的某行代码引发了panic, A被另外一个函数B进行调用, B函数中某段代码也出现了panic, 然后函数B又被另外一个函数C调用了, 最终函数C又被main函数给调用了。

现在的问题是, 最终的panic信息会是什么样子:

答: panic的信息中首先会出现, A函数的panic, 其次才会出现B函数中的panic。

如果想知道上面的具体过程, 我们就需要明白panic传播的具体过程,

下面是panic传播的具体过程:

  1. 某个函数的某行代码无意间引发一个panic, 这时候, 初始的panic详情就会被建立起来, 并且该程序的控制权会立即从行代码转移到调用其所属函数的那行代码上, 也就是栈中上一级
  2. 这同时意味着此行代码所属函数的执行终止, 紧接着控制权不会在这里进行停留, 它又会立即转移到再上一级的调用代码处, 直到栈顶, 也就是最外层函数那里。
  3. 这里的最外层函数指的是go函数, 对于主的goroutine来讲就是main函数, 但是控制权也不会停留在这里, 而是被Go语言运行时系统收回。
  4. 随后, 程序崩溃并终止运行, 承载程序这次运行的进程也会随之死亡并消失, 与此同时,在这个控制权传播的过程中,panic 详情会被逐渐地积累和完善,并会在程序终止之前被打印出来。

Go语言panic详解中相关推荐

  1. c 语言中 %是什么运算符,C 语言基础----详解C中的运算符

    C语言中又有哪些运算符呢? 如下所示: ※ 算术运算符 ※ 赋值运算符 ※ 关系运算符 ※ 逻辑运算符 ※ 三目运算符 C语言基本算术运算符如下表: 除法运算中注意: 如果相除的两个数都是整数的话,则 ...

  2. c语言中常用命名空间,C语言命名空间详解.doc

    C语言命名空间详解 C语言命名空间详解 C语言命名空间分析准则: 在同一命名空间.相同作用域中,任何名字须具有唯一性 每个结构和联合内部都有自己的命名空间(独立于其他空间) 结构标签.联合标签.枚举标 ...

  3. Java Web中的EL(表达式语言)详解

     Java Web中的EL(表达式语言)详解 表达式语言(Expression Language)简称EL,它是JSP2.0中引入的一个新内容.通过EL可以简化在JSP开发中对对象的引用,从而规范页面 ...

  4. C语言中可以用字符串常量来,C语言字符串详解

    原标题:C语言字符串详解 字符串是一种非常重要的数据类型,但是C语言不存在显式的字符串类型,C语言中的字符串都以字符串常量的形式出现或存储在字符数组中.同时,C 语言提供了一系列库函数来对操作字符串, ...

  5. Go语言slice详解

    Go语言slice详解 Go语言中的slice表示一个具有相同类型元素的可变长序列,语言本身提供了两个操作方法: 创建:make([]T,len,cap) 追加: append(slice, T -) ...

  6. Go语言defer详解笔记

    Go语言defer详解 1.defer概述: ​ defer是用来声明一个延迟函数,并且将这个函数放到一个栈中,它的调用时间在return执行之前,详细来讲,它的执行时间在return的值赋值之后,在 ...

  7. python语言编程基础-Python语言入门详解!快速学成Python!

    原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...

  8. python语言入门m-Python语言入门详解!快速学成Python!

    今日主题 "Python语言入门详解" 近两年来,Python语言借着数据科学和人工智能的"东风"成为了最流行的编程语言--街头巷尾人们口口相传.同时,Pyth ...

  9. C语言之详解#ifdef等宏

    C语言之详解#ifdef等宏 这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是&qu ...

最新文章

  1. java长连接socket【转】http://jiewo.iteye.com/blog/1562168
  2. Session 的生命周期
  3. Python基础之完数输出
  4. 数据重塑_人工智能能否重塑全球力量平衡?
  5. java私塾初级_Java私塾Java初级教程
  6. 相关滤波之开篇Mosse原理及代码详解
  7. IDEA修改背景颜色大全(护眼绿等)
  8. 如何区别文本是BIG5还是GB
  9. mysql姓氏笔画排序_mysql中怎么按姓氏笔画排序
  10. 网络存储服务器系统价格比较,【网络存储器报价】四款不同的网络存储器,你会选择那一款?...
  11. 图像合成——套索工具初使用
  12. 背包型动态规划——零钱兑换
  13. ZJU PAT 1010
  14. 系统架构设计笔记(35)—— 结构化分析与设计
  15. Python数据可视化-Matplotlib线性图(折线图等) 代码教学 Part 1
  16. 获取网页中所有的小客车摇号信息
  17. mouse without borders 两台主机共用一套鼠标键盘
  18. MySQL事务(transaction) (有这篇就足够了..)
  19. 升职加薪申请书 经典范文
  20. 介绍一款Oracle的利器小工具-SQLcl

热门文章

  1. Markdown 基础入门
  2. Python遥感影像SAR分割裁剪多张小影像
  3. Python开发qq批量登陆
  4. 汉化MapGuide
  5. 微信小程序案例——比较数字大小案例
  6. 数字电路硬件设计系列(八)之LED电路设计
  7. 最快的分布式关系型数据库MEMSQL
  8. ulipad 无法安装使用、无法调试、64位版本问题 ImportError: No module named comtypes 整体解决方案!
  9. 解决VS在Release下编译程序报“应用程序无法启动,应用程序的并行配置不正确”的问题
  10. JMS(Java消息服务)(Activemq简单介绍)