zoukankan      html  css  js  c++  java
  • 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,则该函数还会打印详细的错误信息。

  • 相关阅读:
    npm使用淘宝镜像源
    MapReduce任务执行源码分析
    spark.sql.shuffle.partitions到底影响什么
    hdfs的写入数据流程及异常情况分析
    面试题
    HDFS的双缓冲机制详解
    rpm包无法卸载
    hive建表支持的文件类型与压缩格式
    centos6中同时安装python3.7与python2.6
    linux centos6.x安装mysql5.6.33版本
  • 原文地址:https://www.cnblogs.com/saryli/p/13201213.html
Copyright © 2011-2022 走看看