go 错误处理panic recover

当程序遇到致命错误时,就是停止运行
Go 通过panic函数来报告致命错误

func testError1()  {
    panic(errors.New("this is a error"))
}

代码执行中出现错误
比如数组越界

    index := 4
    arr := []int{1,2,3}
    _  = arr[index]

那如何“拦截”运行时发生的错误?
recover函数
会返回一个interface{} 类型的结果,如果程序发生错误,就会返回非nil
和defer函数结合使用,就会将错误捕捉到进行处理

func testError()  {
    defer func() {
        if e := recover(); e != nil {
            fmt.Printf("panic : %s\n", e)
        }
    }()
    index := 4
    arr := []int{1,2,3}
    _  = arr[index]
}

原文地址:http://blog.51cto.com/13990437/2314336

时间: 2024-08-04 02:09:17

go 错误处理panic recover的相关文章

defer, panic, recover使用总结

1. defer : 延迟调用.多个defer,依次入栈,在函数即将退出时,依次出栈调用 1 package main 2 import "fmt" 3 func main() { 4 defer func() { 5 fmt.Println("defer one") 6 }() 7 defer func() { 8 fmt.Println("defer two") 9 }() 10 defer func() { 11 fmt.Println(&

Go语言中的panic recover defer

panic 抛出异常 recover 捕获异常 捕获后会返回外层函数继续执行 defer 函数退出之前执行 func panicOut() { print(5) panic("error") print(6) } func recoverHere() { print(3) defer func(){ err := recover() print(err) }() panicOut() print(4) } func outFunc(){ print(1) recoverHere() p

Go 语言简介(上)— 语法

周末天气不好,只能宅在家里,于是就顺便看了一下Go语言,觉得比较有意思,所以写篇文章介绍一下.我想写一篇你可以在乘坐地铁或公交车上下班时就可以初步了解一门语言的文章.所以,下面的文章主要是以代码和注释为主.只需要你对C语言,Unix,Python有一点基础,我相信你会在30分钟左右读完并对Go语言有一些初步了解的. Hello World 文件名 hello.go 1 2 3 4 5 6 7 package main //声明本文件的package名 import "fmt" //im

Go语言基础之函数

函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 函数 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于“一等公民”. 函数定义 Go语言中定义函数使用func关键字,具体格式如下: func 函数名(参数)(返回值){ 函数体 } 其中: 函数名:由字母.数字.下划线组成.但函数名的第一个字母不能是数字.在同一个包内,函数名也称不能重名(包的概念详见后文). 参数:参数由参数变量和参数变量的类型组成,多个参数之间使用,分隔. 返回值:返回

【GoLang】panic defer recover 深入理解

先等我想清楚golang错误处理 为什么要这么设计的时候 再来更新... Golang这么时尚的语言是没有类似try..catch 这种异常处理机制,而是使用 panic 和 recover处理异常. 其实相当于python的raise. golang的异常处理组合 panic,defer,recover,跟java中的try catch finially是类似的. 但是从语言的用户体验来说,不怎么好. 但考虑到golang的场景基本是系统高性能层面的,这种精准错误处理应该减少那种后遗症bug.

GO_05_2:Golang 中 panic、recover、defer 的用法

 函数 defer 1. 它的执行方式类似其他语言中的折构函数,在函数体执行结束后按照调用顺序的 相反顺序 逐个执行 2. 即使函数发生 严重错误 也会被执行,类似于 java 中 try{...} catch(){} finally{} 结构的 finally 3. 支持匿名函数的调用 4. 常用于资源清理.文件关闭.解锁以及记录时间等善后操作 5. 通过与匿名函数配合可在 return 之后修改函数计算结果 6. 如果函数体内某个变量作为 defer 时匿名函数的参数,则在定义 defer

理解Defer、Panic和Recover

刚开始的时候理解如何使用Defer和Recover有一点怪异,尤其是使用了try/catch块的时候.有一种模式可以在Go中实现和try/catch语句块一样的效果.不过之前你需要先领会Defer.Panic和Recover的精髓. 首先你需要理解defer关键字的作用,请看如下的代码: package main import ( "fmt" ) func main() { test() } func minicError(key string) error { return fmt.

Go基础系列:defer、panic和recover

defer关键字 defer关键字可以让函数或语句延迟到函数语句块的最结尾时,即即将退出函数时执行,即便函数中途报错结束.即便已经panic().即便函数已经return了,也都会执行defer所推迟的对象. 例如: func main() { a() } func a() { println("in a") defer b() println("leaving a") //到了这里才会执行b() } func b() { println("in b&qu

Go语言 异常panic和恢复recover用法

Go语言 异常panic和恢复recover用法 背景:Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱.因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常.在Go语言中,使用多值返回来返回错误.不要用异常代替错误,更不要用来控制流程.在极个别的情况下,才使用Go中引入的Exception处理:defer, panic, recover. panic: 1.内建函数