[ golang ] 错误处理

八、错误处理

error 接口

go 语言引入一个error 接口,定义如下:

type error interface {

      Error() string

}

使用如下:

 

                             

关键字defer

通过defer关键字,可以将需要释放的资源在函数的最后进行释放,不在像C语言那样使用goto到 函数return前释放;

参考如下:

func CopyFile(dst, src string) (w int64, err error) {
    srcFile, err := os.Open(src)
    if err != nil {
        return
    }
    defer srcFile.Close()
    dstFile, err := os.Create(dstName)
    if err != nil {
        return
    }
    defer dstFile.Close()
    return io.Copy(dstFile, srcFile)
}

panic()和recover()

Go语言引入了两个内置函数panic()recover()以报告和处理运行时错误和程序中的错误场景:
func panic(interface{})
func recover() interface{}

        当在一个函数执行过程中调用panic()函数时,正常的函数执行流程将立即终止,但函数中
之前使用defer关键字延迟执行的语句将正常展开执行,之后该函数将返回到调用函数,并导致
逐层向上执行panic流程,直至所属的goroutine中所有正在执行的函数被终止。错误信息将被报
告,包括在调用panic()函数时传入的参数,这个过程称为错误处理流程。

        recover()函数用于终止错误处理流程。一般情况下, recover()应该在一个使用defer
关键字的函数中执行以有效截取错误处理流程。如果没有在发生异常的goroutine中明确调用恢复
过程(使用recover关键字),会导致该goroutine所属的进程打印异常信息后直接退出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值