异常处理

package main

import (
    "fmt"
    "os"
)

// 异常处理
//defer:延迟执行,并且即便程序出现严重错误,也会执行
//panic:主动抛出异常 raise
//recover:恢复程序,继续执行
//
//func main() {
//
//    defer fmt.Println("我最后执行")  //注册一下,并不执行,等main函数执行完了以后,从下往上执行defer定义的东西
//    defer fmt.Println("我倒数第二个打印")
//    fmt.Println("我先执行")
//    //var a []int
//    //fmt.Println(a[10])
//    panic("我出错了")
//    fmt.Println("ccccc")
//
//    //假设打开一个文件
//    //f:=open()
//    //defer f.close()
//    //
//    //出错了
//    //
//
//}


//
//func f1(){
//    fmt.Println("f1 f1")
//}
//func f2(){
//    defer func() {   //这个匿名函数永远会执行
//        //error:=recover()  //恢复程序继续执行
//        //fmt.Println(error) //如果没有错误,执行recover会返回nil    如果有错误,,执行recover会放错误信息
//        if error:=recover();error!=nil{
//            //表示出错了,打印一下错误信息,程序恢复了,继续执行
//            fmt.Println(error)
//        }
//        // 相当于finally
//        fmt.Println("我永远会执行,不管是否出错")
//    }()
//    fmt.Println("f2 f2")
//    //panic("主动抛出错误")
//}
//func f3(){
//    fmt.Println("f3 f3")
//}
//
//func main() {
//    //捕获异常,处理异常,让程序继续运行
//
//    f1()
//
//    f2()
//    f3()
//}

/*
try:
    可能会错误的代码
except Exception as e:
    print(e)
finally:
    无论是否出错,都会执行
 */
/*现在这么写
defer func() {
    if error:=recover();error!=nil{
        //except的东西
        fmt.Println(error)
    }
    //相当于finally,无论是否出错,都会执行
}()
可能会错误的代码
 */


// go的错误处理
func main() {
    f, err := os.Open("/test.txt")
    if err != nil {
        fmt.Println(err)
        return
    }

    if err != nil {
        fmt.Println(err)
        return
    }


    fmt.Println(f.Name(), "opened successfully")
}

 

上一篇:Go 面试每日一题(1)


下一篇:拒绝js阻塞—defer、async作用和区别分析