go错误处理

错误处理

通过内置错误接口实现简单的错误处理机制。

error是一个接口类型!!!

自定义error!!!

package main

import (
    "errors"
    "fmt"
)

type error interface {
    Error() string
}

func Sqrt(f float64)(float64,error)  {
    if f < 0 {
        return 0,errors.New("math:square root of negative number")
    }
    return f,nil

}
func main() {
    result,err := Sqrt(-1)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(result)
}

panic和recover

panic 与 recover 是 Go 的两个内置函数,这两个内置函数用于处理 Go 运行时的错误,panic 用于主动抛出错误,recover 用来捕获 panic 抛出的错误!!!

  • 引发panic有两种情况,一是程序主动调用,二是程序产生运行时错误,由运行时检测并退出。
  • 发生panic后,程序会从调用panic的函数位置或发生panic的地方立即返回,逐层向上执行函数的defer语句,然后逐层打印函数调用堆栈,直到被recover捕获或运行到最外层函数。
  • panic不但可以在函数正常流程中抛出,在defer逻辑里也可以再次调用panic或抛出panicdefer里面的panic能够被后续执行的defer捕获。
  • recover用来捕获panic,阻止panic继续向上传递。recover()defer一起使用,但是defer只有在后面的函数体内直接被掉用才能捕获panic来终止异常,否则返回nil,异常继续向外传递。

 

 

 

posted @ 2019-11-25 14:19  qijunL  阅读(122)  评论(0)    收藏  举报