Go语言异常处理笔记

1.error接口

Go语言里引入了一个关于错误处理的标准模式,也就是error接口,它是Go语言内建的接口类型.

error可以返回的一般是小错误,这些错误不是致命的,换句话说是不影响到系统本身的。

直接看一个demo

func test(a int, b int) (value int, err error) {
	//如果可以相除,返回int,如果报错,打印出错误信息
	if b==0 {
		err = errors.New("0 不合适")
	}else {
		value = a/b
	}
	return value,err
}

func main(){
	value,err:=test(10,0)
	if err==nil {
		fmt.Print(value)
	}else {
		fmt.Print(err)
	}
}

2. panic函数

panic函数返回的一般就是让程序需崩溃的错误了。

也就是当程序进入了不可挽回的错误状态,比如数组越界,空指针,就会引起panic异常。当出现这类错误的时候,程序会崩溃,并且打印出错误日志。日志信息包括panic value和函数调用的堆栈跟踪信息。

先展示一下panic报错

在这里插入图片描述
运行后:
在这里插入图片描述
但是,如果直接调用panic函数,也会引发panic异常;panic接受任何值作为参数。

下面先写一个直接调用panic导致程序崩溃的例子。

在这里插入图片描述
在这里插入图片描述

当我们手动调用panic之后,程序会终止运行。
类似于Java的RuntimeException

3. Defer延迟调用

defer函数只能出现在函数的内部,用于延迟一个函数的执行。

也是写一个demo

在这里插入图片描述
输出
在这里插入图片描述

那么,我们知道defer可以延迟函数的执行,那么如果有多个defer是如何决定执行顺序的呢?

事实上,defer调用的函数并没有被直接使用,而是先加载到了栈区内存中,在其他函数都结束之后才会执行,从后往前调用,符合栈的基本数据结构。

但是要注意的一点是,defer只能修饰void类型的函数,无法修饰有返回值的函数。

4. recover拦截错误

可以理解为try catch,recover的意义也是如此,从panic的状态恢复,并且重新获得程序的流程控制权。

注意:recover只有在defer调用的函数中有效

也是写一个demo

在这里插入图片描述
我们看这个程序是肯定会报一个数组越界的panic异常。所以就可以来使用recover来避免程序报错。

在这里插入图片描述
而recover()实际上也是有返回值的,我们可以拿来输出,就可以打印出异常了。这个操作可以直接在匿名函数执行即可。

发布了296 篇原创文章 · 获赞 53 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41936805/article/details/104102734