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") }