golang panic和recover

一、recover只有在defer调⽤的函数中有效。

1、没有recover,发生错误不再执行

package main

import "fmt"

func Demo(i int) {
	//定义10个元素的数组
	var arr [10]int
	arr[i] = 10
}

func main() {
	Demo(10)
	//产⽣错误后 程序继续
	fmt.Println("程序继续执⾏...")
}

2、存在recover,发生错误继续往后执行

package main

import "fmt"

func Demo(i int) {
	//定义10个元素的数组
	var arr [10]int
	//错误拦截要在产⽣错误前设置
	defer func() {
		//设置recover拦截错误信息
		err := recover()
		//产⽣panic异常 打印错误信息
		if err != nil {
			fmt.Println(err)
		}
	}()
	//根据函数参数为数组元素赋值
	//如果i的值超过数组下标 会报错误:数组下标越界
	arr[i] = 10
}

func main() {
	Demo(10)
	//产⽣错误后 程序继续
	fmt.Println("程序继续执⾏...")
}

原文地址:https://www.cnblogs.com/wuchangblog/p/14906902.html