异常处理
当程序发生异常无法继续运行时,通常使用 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("打印出错") } }