panic 和 recover

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

一般情况下,系统宕机时,系统会停止执行,并开始执行延迟操作。

由于Go语言不支持try catch finally的操作,可以用panic和recover来模拟相关操作

模拟时需要使用defer关键词,充当finally的效果。(需要说明的是,多个defer的执行顺序为倒序,既后出现的defer语句先执行)

下面是模拟try catch的具体示例




import (

"fmt"

)

// 用panic 和 recover来模拟 try catch finally

func main() {

fmt.Println("start main")

defer recoverDefer()//必须通过defer延迟的方式来捕获panic

  panic("test panic")//程序宕机 ,类似于throw exception

  fmt.Println("end main")//无法执行

}

//有点类似于finally

func recoverDefer() {

fmt.Println("start recover")

if err :=recover(); err !=nil {

//do something

      fmt.Println(err)

}

fmt.Println("end recover")

}

运行结果:

start main

start recover

test panic

end recover


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容