美文网首页Golang基础gin
Golang基础(四)-- 错误处理

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

作者: 魔改谢馒头 | 来源:发表于2018-09-12 16:17 被阅读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
    }
    

    相关文章

      网友评论

        本文标题:Golang基础(四)-- 错误处理

        本文链接:https://www.haomeiwen.com/subject/qjtbgftx.html