Go语言圣经 - 第5章 函数 - 5.9 Panic异常

第5章 函数

函数可以让我们将一个语句序列打包成一个单元,然后可以从程序中其他地方多次调用,函数的机制可以让我们把一个大的工作分解成小任务。前面我们已经接触过函数,本章我们将讨论函数的更多特性

5.9 Panic异常

Go的类型系统会在编译时捕获很多错误,但是有些错误只能在运行时检查,如数组访问越界、空指针引用等,这些运行时检查出的错误会引起panic

一般而言,当发生panic时,程序会中断运行,并立即执行在该goroutine中被延迟的函数(defer机制)。随后,程序崩溃并输出日志信息,日志信息包含panic value和函数调用时堆栈跟踪信息。panic value通常是某种错误信息

对于每个Goroutine,日志信息中都会有与之相对的、发生panic时的函数调用堆栈跟踪信息

通常,我们不需要再次运行 程序取定位问题,日志已经提供了足够多的诊断信息。因此,我们在填写问题报告时,一般会将panic异常和日志信息一并记录

不是所有的panic都来自运行时,直接调用内置的怕panic函数也会引发panic异常;panic函数接受任何值作为参数,当某些不应当发生的场景发生时,我们就应该调用panic,比如,当程序达到了某条逻辑上不可能达到地路径:

switch s := suit(drawCard());s {
case "Spades":
case "Hearts":
case "Diamonds":
case "Clubs":
default:
   panic(fmt.Sprintf("invalid suit %

你可能感兴趣的:(#,Go,golang,错误处理,Panic异常,Defer语句,堆栈信息)