异常处理和错误处理

异常处理

  当程序发生异常无法继续运行时,通常使用 panic 来终止程序。当函数发生panic时,程序会控制线程返回到该函数的调用方,直到当前的所有函数都返回退出,然和程序就会打印出panic信息,最后程序终止。

1.什么时候可以使用panic?

  在程序中,应该尽可能的使用错误,而不是使用panic和recover。只有当程序无法继续运行的时候,才应该使用panic和recover机制。

  panic有以下两种情况时可以使用:

    1)发生了一个不可恢复的错误,此时程序不能继续运行。

    2)发生了一个编程上的问题。

2.异常处理方法

  defer 表示延迟调用,即便程序出现严重错误,也会执行。

  panic 就是python中的raise(主动抛出异常)。

  recover 表示恢复程序,继续执行。

package main

import "fmt"

func main() {
    f1()    # 先注册,后调用。
    f2()
    f3()
}

func f1()  {
    fmt.Println("f1...")
}

func f2()  {
    defer func() {
        if a:=recover();a!=nil{    # /a 如果不等于nil,表示程序出了异常,a 就是异常信息。a 如果等于nil,表示没有异常
            fmt.Println(a)
        }    #用于会被执行(相当于finally)
    }()
    fmt.Println("f2...")
    var a =make([]int,3,3)
    fmt.Println(a[4])
}

func f3()  {
    fmt.Println("f3...")
}

错误处理

  错误表示程序中出现了异常。在go语言中,错误用 error 类型来表示。

package main

import (
    "errors"
    "fmt"
)

# 错误
func circleArea(radius int) (int, error) {
    if radius < 0 {
        return 0, errors.New("错误信息")
        panic("xddd")
    }
    return 100, nil
}

func main() {
    a,_:=circleArea(-10)
    if err!=nil{
        fmt.Println(err)
    }
    fmt.Println(err)
    fmt.Println(a)
    _,err:=fmt.Println()
    if err!=nil{
        fmt.Println("打印出错")
    }
}
原文地址:https://www.cnblogs.com/blue-tea/p/12038240.html