zoukankan      html  css  js  c++  java
  • 56_异常处理error,errors和painc的使用

    Go语言引入了一个关于错误处理的标准模式,即error接口,它是Go语言内建的接口类型

    //error和errors的使用
    package main

    import (
    "errors"
    "fmt"
    )

    func main() {
    //调用errorf()方法,返回一个error类型的字符串(error是一个接口类型)
    var err1 error = fmt.Errorf("this is a new time")
    fmt.Println(err1)
    //直接调用errors包的new方法,作用和errorf一样
    err2 := errors.New("this is a good new")
    fmt.Println(err2)
    }

      当遇到不可恢复的错误状态的时候,如数组访问越界、空指针引用等,这些运行时错误会引起painc异常。这时,上述错误处理方式显然就不适合了。反过来讲,在一般情况下,我们不应通过调用panic函数来报告普通的错误,而应该只把它作为报告致命错误的一种方式。当某些不应该发生的场景发生时,我们就应该调用panic。

      当panic异常发生时,程序会中断运行,并立即执行在该goroutine(可以先理解成线程,在中被延迟的函数(defer 机制)。随后,程序崩溃并输出日志信息。日志信息包括panic value和函数调用的堆栈跟踪信息。

    不是所有的panic异常都来自运行时,直接调用内置的panic函数也会引发panic异常;panic函数接受任何值作为参数。
      func panic(v interface{})

    //panic代码
    package main

    import "fmt"

    func test(a, b int) (res int) {
    if b == 0 {
    panic("this is a zero")
    } else {
    res = a / b
    return
    }
    }

    func main() {
    //可以隐式调用painc,使程序中断
    var a []int = []int{1, 2, 3, 4}
    result := test(1, 0) //程序会在此处中断,不会往下执行
    fmt.Println(result)
    for _, value := range a {
    fmt.Println(value)
    }

    }
    每天的价值就是不停息的前进!!!
  • 相关阅读:
    实现IEnumberable接口和IEnumberator
    XAML-1
    Java基础00-Java概述1
    详解Lombok中的@Builder用法
    stream之map的用法
    stream之forEach的用法
    Java中map.getOrDefault()方法的使用
    BiPredicate的test()方法
    Function.identity()
    java 8 lamda Stream的Collectors.toMap 参数
  • 原文地址:https://www.cnblogs.com/zhaopp/p/11625837.html
Copyright © 2011-2022 走看看