码迷,mamicode.com
首页 > 其他好文 > 详细

【Go】Panic函数

时间:2018-10-19 00:20:20      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:run   调用   控制器   消失   user   span   绝对路径   err   index   

  panic(运行时恐慌)是一种只会在程序运行时才回抛出来的异常。在panic被抛出之后,如果没有在程序里添加任何保护措施的话,程序就会在打印出panic的详情,终止运行。

  举个栗子

package main

func main() {
    s1 := []int{0, 1, 2, 3, 4}
    e5 := s1[5]
    _ = e5
}

  运行上面的代码,会抛出panic

panic: runtime error: index out of range

goroutine 1 [running]:   //Id为1的goroutine在此panic被引发时正在运行
main.main()
 /Users/haolin/GeekTime/Golang_Puzzlers/src/puzzlers/article19/q0/demo47.go:5 +0x3d  //此行代码在其所属源码文件中的行数,以及源码文件的绝对路径, +03d是计数偏移量,用处不大。
exit status 2  //以退出状态码2结束运行,一般状态不为0时表示程序非正常退出

 

 从Painc被引发到程序终止运行的大致过程是怎样的?

  某个函数中的某行代码引发了一个panic后,初始的panic详情会被建立起来,并且该程序的控制器会立即从此行代码转移到调用其所属函数的那行代码上(调用栈中的上一级),此行代码所属函数的执行随即终止。紧接着,控制权并不会在此有片刻停留,它又会立即转移至上一级的调用代码处,反方向传播直至最外层函数(go函数,对于主goroutine来说就是main函数)。但是控制器也不会停留在那里,而是被Go语言运行时系统收回。随后程序奔溃并终止运行,承载程序这次运行的进程也会随之死亡并消失。与此同时,在这个控制器传播过程中,panic详情会积累和完善,并在程序终止之前打印出来。

//main函数调用了caller1函数,caller1函数调用了caller2函数
goroutine 1 [running]:
main.caller2()
 /Users/haolin/GeekTime/Golang_Puzzlers/src/puzzlers/article19/q1/demo48.go:22 +0x91
main.caller1()
 /Users/haolin/GeekTime/Golang_Puzzlers/src/puzzlers/article19/q1/demo48.go:15 +0x66
main.main()
 /Users/haolin/GeekTime/Golang_Puzzlers/src/puzzlers/article19/q1/demo48.go:9 +0x66
exit status 2

 

【Go】Panic函数

标签:run   调用   控制器   消失   user   span   绝对路径   err   index   

原文地址:https://www.cnblogs.com/yuxiaoba/p/9813605.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!