美文网首页
GO学习笔记(14) - 错误处理

GO学习笔记(14) - 错误处理

作者: 卡门001 | 来源:发表于2021-07-06 12:07 被阅读0次

Defer

  • 确保在函数结束时对资源进行相关操作
  • 先进后出的原则,多条语句越靠近尾部越先执行
    func readWriter(filename string)  {
    file,err := os.Create(filename)
    if err != nil{
        panic(err)
    }
    //关闭资源
    defer file.Close()

    writer := bufio.NewWriter(file)
    defer  writer.Flush()

    f :=  fibonacci.Fibonacci()
    for i := 0;i<20;i++  {
        //倒数打印
        defer fmt.Println(i) 
        if i >=19 {
            break
        }
        fmt.Fprintln(writer,f())
    }
}

Panic vs Recover

Panic

  • 异常抛出,停止函数执行
  • 一直向上返回,执行每一层的defer
  • 如查没有遇到recover,程序退出

Recover

  • 仅在defer调用中使用
  • 获取panic的值,如无法处理,则重新panic

常规错误处理的方法

    file,err := os.Create(filename)
    if err != nil{
        if pathError, ok := err.(*os.PathError); !ok{
            panic(err)
        }else {
            fmt.Printf("%s %s %s  \n",
                pathError.Op,
                pathError.Path,
                pathError.Err)
        }
        return
    }

含Recover的例子

package main

import (
    "fmt"
)

func tryRecovery()  {
    defer func() {
        r := recover()
        if err,ok := r.(error); ok {
            fmt.Println("Error occured:",err)
        }else{
            panic(r)
        }
    }()

    //panic(errors.New("This is an error!"))
    a := 5/0
    fmt.Println(a)
}

func main() {
    tryRecovery()
}

自定义错误

  • 定义
type UserError string


func (e UserError) Error() string{
    return e.Message()
}

func (e UserError) Message() string{
    return fmt.Sprintf("%s", e)
    //return  string(e)
}
  • 错误
    if strings.Index(request.URL.Path,PREFIX) !=0{
        return error2.UserError("path must with "+prefix)
    }
  • 判断是否为UserError错误
if err != nil{
  if userError,ok := err.(userError); ok {
    http.Error(writer,userError.Message(),http.StatusBadRequest)
   }else{ 
        //TODO:...
   }
...

go语言

package tests

import (
    "math"
    "testing"
)

相关文章

  • GO学习笔记(14) - 错误处理

    Defer 确保在函数结束时对资源进行相关操作 先进后出的原则,多条语句越靠近尾部越先执行 Panic vs Re...

  • Go 语言基础——错误处理

    学习目标 掌握错误处理 掌握自定义错误处理 掌握defer关键字的使用 错误处理 GO没有异常处理机制 Go语言引...

  • Go语言开发资料收集

    【Go 边看边练 -《Go 学习笔记》】系列Go 边看边练 -《Go 学习笔记》系列(一)- 变量、常量Go 边看...

  • 2021-06-08

    Go的编程模式,错误处理 引入了其他语言的错误处理模式,最后,说明Go错误处理的好处。主要是将函数的入参、出参、错...

  • GO——学习笔记(五)

    上篇:GO——学习笔记(四) 下篇:GO——学习笔记(六) 示例代码——go_4 https://github.c...

  • GO——学习笔记(十):搭建简单的Web服务器

    上篇:GO——学习笔记(九) 下篇:GO——学习笔记(十一) 参考: https://github.com/ast...

  • GO——学习笔记(六)

    上篇:GO——学习笔记(五) 下篇:GO——学习笔记(七) 参考: https://github.com/asta...

  • GO——学习笔记(九):并发

    上篇:GO——学习笔记(八) 下篇:GO——学习笔记(十) 参考: https://github.com/asta...

  • GO——学习笔记(七)

    上篇:GO——学习笔记(六) 下篇:GO——学习笔记(八) 参考: https://github.com/asta...

  • GO——学习笔记(八)

    上篇:GO——学习笔记(七) 下篇:GO——学习笔记(九) 参考: https://github.com/asta...

网友评论

      本文标题:GO学习笔记(14) - 错误处理

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