• golang学习笔记---错误处理


    error接口

    //定义error接口
    type error interface{
      Error() string
    }
    //调用error接口
    func Foo(param int) (n int,err error){
      //...
    }
    n,err:=Foo(0)
    if err!=nil{
      //错误处理
    }else{
      //使用返回值
    }
    

      

    panic()和recover()

    Go中使用内置函数panic()recover()来处理程序中的错误。

    func panic(interface{})
    func recover() interface{}
    

      

    panic()

    当函数执行触发了panic()函数时,如果没有使用到defer关键字,函数执行流程会被立即终止;如果使用了defer关键字,则会逐层执行defer语句,直到所有的函数被终止。

    错误信息,包括panic函数传入的参数,将会被报告出来。

    示例如下:

    panic(404)
    panic("network broken")
    panic(Error("file not exists"))
    

      

    recover()

    recover()函数用于终止错误处理流程。一般使用在defer关键字后以有效截取错误处理流程。如果没有在发生异常的goroutine中明确调用恢复过程(使用recover关键字) ,会导致该goroutine所属的进程打印异常信息后直接退出。

    defer func() {
        if r := recover(); r != nil {
            log.Printf("Runtime error caught: %v", r)
        }
    }()
    foo()
    

      无论foo()中是否触发了错误处理流程,该匿名defer函数都将在函数退出时得到执行。假如foo()中触发了错误处理流程, recover()函数执行将使得该错误处理过程终止。如果错误处理流程被触发时,程序传给panic函数的参数不为nil,则该函数还会打印详细的错误信息。

  • 相关阅读:
    方便操作的命名范围scope
    使用Emmet加速Web前端开发
    Beanstalkd一个高性能分布式内存队列系统
    2000年互联网泡沫
    简单有效的kmp算法
    文本比较算法:计算文本的相似度
    字符串的四则运算
    文本比较算法:Needleman/Wunsch算法
    两则面试题(动态规划)
    文本比较算法:编辑距离
  • 原文地址:https://www.cnblogs.com/saryli/p/13201213.html
Copyright © 2020-2023  润新知