Golang基础gin

Golang基础(四)-- 错误处理

2018-09-12  本文已影响44人  魔改谢馒头
golang的错误处理和传统的try、catch不太一样,在做项目的时候为了写错误信息真的是适应了好半天。

最主要的一个点就是,err.Error()方法只是返回,或者说让你编辑错误信息用的方法,他并不是一个传统意义上的Exception,你可以把他理解成一个可以在panic和recover里输出的字符串。

而panic才是抛出异常的语句,这个语句你在项目中要慎用。异常需要你自己手动抛出,还必须自己写处理方法,如果你在一个同步执行的方法里写了panic且并没有recover,那么恭喜你,挨顿打吧。

传统的情景:

try{
     下面我的代码可能会出错
}catch(一堆根本记不住的错误类型 ex){
     console.write(我刚才出错了+ex)
}finally{
     大家就当无事发生过
}

golang的情景:

func main(){
   defer func(){
    if err := recover(); err != nil {
        做事情要悠着点,你刚才是不是 + err.Error()
    }
   }()

   _,err:=随便写,出错算我输()
   if err!=nil{
       我可能出错了,我想打印一下错误信息
       fmt.println(我刚才+err.Error())
       但!
       如果我不写panic,recover是不会截获我的。
   }
   所以我还是会往下执行的

   ...

   _,err=一个会引发panic的方法()
  if err!=nil{
     你在程序内部已经引发panic了,你现在进不到这个判断当中,会直接被recover捕获
  }
}

func 随便写,出错算我输() (int,error){
    if  我心情不好{
    return 0,errors.New("这是我自己编辑的错误信息,我认为在某种条件下,我输入的参数或者我程序执行的步骤是错误的,所以我写一条error返回去")
   }
   我的流程
   return 1,nil
}

func 一个会引发panic的方法() (int,error){
    err:=errors.New("刚开始就panic")
    panic(err)
    return 0,err //unreachable code
}
上一篇 下一篇

猜你喜欢

热点阅读