panic (推荐学习:go)

当遇到不可恢复的错误状态的时候,如数组访问越界、空指针引用等,这些运行时错误会引起panic异常。

golang中没有try ... catch...这类异常捕获语句,但是提供了panic和recover内建函数,用于抛出异常以及异常的捕获。

• panic、 recover 参数类型为 interface{},因此可抛出任何类型对象。

• 如果程序出现了致命的错误,导致整个程序无法进行下去,golang提供了panic函数,用来实现程序的退出。

• 当程序发生 panic 时,使用 recover 可以重新获得对该程序的控

制。

• 不是所有的panic异常都来自运行时,直接调用内置的panic函数也会引发panic异常

• panic函数接受任何值作为参数。

(1)panic的使用

①延迟调试中引发的错误,可被后续延迟调试捕获,但仅最后错误可被捕获。

func test() {defer func() {    fmt.Println(recover())}()defer func() {    panic("defer panic")}()    panic("test panic")}func main() {    test()    //defer panic}

②当函数发生 panic 时,它会终止运行,在执行完所有的延迟函数后,程序控制返回到该函数的调用方。这样的过程会一直持续下去,直到当前协程的所有函数都返回退出,然后程序会打印出 panic 信息,接着打印出堆栈跟踪,最后程序终止。

如果函数没有 panic,调用 recover 函数不会获取到任何信息,也不会影响当前进程。

demo

package mainimport (    "fmt")func fullName(firstName *string, lastName *string) {    if firstName == nil {        panic("Firsr Name can't be null")    }    if lastName == nil {        panic("Last Name can't be null")    }    fmt.Printf("%s %s\n", *firstName, *lastName)    fmt.Println("returned normally from fullName")}func test(){    defer fmt.Println("deferred call in test")    firName := "paul"    fullName(&firName, nil)}func main() {    defer fmt.Println("deferred call in main")    test()    fmt.Println("returned normally from main")}

更多相关文章

  1. golang的函数怎么写
  2. 从go语言闭包谈函数式编程
  3. go语言中函数与方法介绍
  4. go语言结构体组合函数介绍
  5. 运行golang程序提示进程无法启动
  6. 使用 Go 来构建一个 CLI 程序
  7. 如何在Linux上运行第一个go程序
  8. golang如何调用函数?
  9. 详解Golang中函数作为值与类型

随机推荐

  1. android组建属性及使用许可
  2. Netty多语言(Java、Android 、C#、WebSock
  3. 去除或替换listview 默认的点击选中时的
  4. Android 中使用OpenGL ES进行2D开发(GLSur
  5. FFmpeg在Android上的移植之第一步
  6. android 判断EditText中输入的值是数字、
  7. Android WebView详解(二):Android原生与JS互
  8. Android开发实践教程
  9. Android Fingerprint完全解析(三) :Finger
  10. android6.0源码分析之AndroidRuntime的建