异常处理和错误处理

defer

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

package main

import "fmt"

func main(){
    defer fmt.Println("我是最后执行1")
    defer fmt.Println("我是最后执行2")  // 先执行2再执行1
    f1()
    f2()
}

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

panic、recover

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("出错了")
        }

    }()
    fmt.Println("f2...")
    var a =make([]int,3,3)
    fmt.Println(a[4])
}
func f3()  {

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

错误处理

错误表示程序中出现了异常情况。比如当我们试图打开一个文件时,文件系统里却并没有这个文件。这就是异常情况,它用一个错误来表示。

在 Go 中,错误一直是很常见的。错误用内建的 error 类型来表示。

就像其他的内建类型(如 intfloat64 等),错误值可以存储在变量里、作为函数的返回值等等。

package main

import (
    "errors"
    "fmt"
)


func circleArea(radius int) (int, error) {
    if radius < 0 {
        return 0, errors.New("错误信息")  // 如果不满足判断就会显示错误信息
    }
    return 100, nil
}

func main() {
    a,_:=circleArea(-10)
    if err!=nil{
        fmt.Println(err)
    }
    fmt.Println(a)
    _,err:=fmt.Println()
    if err!=nil{
        fmt.Println("打印出错")
    }
}

猜你喜欢

转载自www.cnblogs.com/xiongying4/p/12030309.html