6、go的异常处理

先看正常的出现异常情况

func main() {
	test()
	// 上面方法执行有报错,所以下面代码不会执行
	fmt.Println("上面方法执行成功...")
	fmt.Println("正常执行下面代码逻辑...")
}

func test() {
	num1 := 10
	num2 := 0 // 除数不能为0,就会报错
	result := num1 / num2
	fmt.Println(result)
}

上面代码肯定会报错

使用defer + recover()函数的机制处理

func main() {
	test()
	// 上面方法执行有报错,所以下面代码不会执行
	fmt.Println("上面方法执行成功...")
	fmt.Println("正常执行下面代码逻辑...")
}

func test() {
	defer func() {
		// 调用recover内置函数,捕获错误
		err := recover()
		// 如果美欧捕获异常,返回值为零:nil
		if err != nil {
			fmt.Println("错误已经捕获")
			fmt.Println("err是",err)
		}
	}()
	num1 := 10
	num2 := 0 // 除数不能为0,就会报错
	result := num1 / num2
	fmt.Println(result)
}

正常打印:
image

自定义错误

func main() {
	err := test()
	if err != nil {
		fmt.Println("自定义错误: ", err)
		panic(err) // panic函数阻止了程序继续允许,直接停止了
	}
	// 上面方法执行有报错,所以下面代码不会执行
	fmt.Println("上面方法执行成功...")
	fmt.Println("正常执行下面代码逻辑...")
}

func test() (err error) {
	num1 := 10
	num2 := 0 // 除数不能为0,就会报错
	if num2 == 0 {
		// 抛出自定义异常
		return errors.New("除数不能为0哦!!!")
	} else {
		result := num1 / num2
		fmt.Println(result)
		return nil
	}
}

打印:
image

posted @ 2022-11-25 15:59  aBiu--  阅读(15)  评论(0编辑  收藏  举报