go语言学习8:处理错误

go语言的方法异常与nodejs非常相似,源码包中存在大量的err返回设计
在这里插入图片描述
如果没有发生错误,返回的错误值将为nil

error

创建错误

err:=errors.New("err")

defer

可以理解为java中的finally。
defer语句经常被用于处理成对的操作,如打开-关闭、连接-断开连接、加锁-释放锁。特别是在执行打开资源的操作时,遇到错误需要提前返回,在返回前需要关闭相应的资源,不然很容易造成资源泄露等问题。
当一个函数有多个延迟调用时,它们被添加到一个堆栈中,并按后进先出(Last In First Out,LIFO)的顺序执行。

panic recover

panic()是一个内建函数,可以中断原有的控制流程
recover()可以让进入恐慌流程的Goroutine(可当作线程理解,后续章节会详细讲解)恢复过来并重新获得流程控制权。需要注意的是,recover()让程序恢复,必须在延迟函数中执行。换言之,recover()仅在延迟函数中有效。

package main

import "fmt"

func main() {
	funcA()
	funcB()
	funcC()
	fmt.Println("finish")
}

func funcC() {
	defer func() {
		fmt.Println("exec defer func")
		msg := recover()
		fmt.Println("get return value", msg)
	}()
}

func funcB() {
	defer func() {
		if msg := recover(); msg != nil {
			fmt.Println(" recover ,get return value", msg)
		}
	}()
	fmt.Println("this is funcB")
	for i := 0; i < 10; i++ {
		fmt.Println("i:", i)
		if i == 5 {
			panic("funcB panic")
		}
	}
}

func funcA() {
	fmt.Println("this is funcA")
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值