异常处理:认识defer、recover、panic关键词

发布时间 2023-04-12 11:37:43作者: wzyy
package main

import (
	"fmt"
)

func main() {
	// deferTest()

	/**
	总结
	1、defer延迟执行异常处理
	2、recover会捕获抛出的异常(主动异常或未知异常)
	3、panic会主动抛出异常
	*/
	defer exceptionCatch()
	panicTest(true)

}

// panic英⽂意思是恐慌,在这⾥意思是抛出⼀个程序异常,即报告程序运⾏时错误
func panicTest(throw bool) {
	println("panicTest begin")

	if throw {
		panic("抛出一个异常")
	}
	println("panicTest end")

}

// defer有延迟的意思,就是稍后执⾏,先执⾏函数主体内容,defer的内容稍后执⾏
func deferTest() {
	// 异常处理 内置函数方式
	//defer func() {
	//	if r := recover(); r != nil {
	//		fmt.Println("Some error happened!", r)
	//		ret = -1
	//	}
	//}()

	// 异常处理 外部函数方式
	defer exceptionCatch()

	array := [3]int{2, 3, 4}
	index := 0
	for ; index < 10; index++ {
		println(array[index])
	}
}

// recover() 函数⽤于终⽌错误处理流程,也就是我们常规说的 catch
func exceptionCatch() {
	if r := recover(); r != nil {
		fmt.Println("出现异常了:", r)
	}
}