GO学习笔记——错误处理

一、错误处理基本概念与优点

1、基本概念

在默认情况下,当程序运行的时候发生错误(panic)时,程序就会退出,那么如果我们希望发生错误时,可以捕获错误并进行处理,保证程序可以继续执行,这就需要错误处理机制(类似Java中的异常处理机制)。

2、优势

进行错误处理后,程序不会轻易挂掉退出,如果再加入预警代码的话,还可以让程序更加健壮。


二、GO中的错误处理方式

GO追求简洁优雅,所以GO不支持传统的try…catch…finally这种处理方式。

GO引用的处理方式为:defer,panic,recover

处理的过程为:GO中抛出一个panic异常,然后在defer中通过recover来捕获这个异常,然后正常处理。

下面是一个使用案例。

import(
    "fmt"
)

func test() {
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println("err=", err)
		}
	}()
	num1 := 88
	num2 := 0
	fmt.Println(num1 / num2)

}

func main(){
    test()
}

执行后发现,代码可以正常结束,并且会输出如下结果

其中,recover()是GO的内置函数,可以用于捕获异常,然后将结果返回给为error类的err,随后在后面的if条件中进行处理。利用defer声明的匿名函数,在整个函数执行的最后执行上述操作,来捕获执行过程中出现的异常,并进行处理。


三、自定义错误

同样的,GO中也支持自定义错误,使用的是errors.New和panic内置函数。

errors.New("错误说明"),会返回一个error类型的值,表示一个错误,而panic内置函数可以接收interface{}类型的值作为参数,所以可接受error类型的变量,输出错误信息,并退出程序。

以下为一个示例代码:

import(
    "fmt"
)

func getAge(age int) error {
	if age < 0 {
		return errors.New("年龄不能为负数")
	} else {
		return nil
	}
}

func test2() {
	err := getAge(-1)
	if err != nil {
		panic(err)
	}
	fmt.Println("test2() continue")

}

func main(){
    test2()
}

代码的执行结果为:

并且会有报错信息:

以上为自定义错误的相关说明。


  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值