Go语言中的错误处理

相较于Java中的try/catch结构,各种捕获,各种错误类型,在Go中,它只是把错误当成一种值来处理,强调判断错误,处理错误,相对于Java中的抛出异常,Go语言中的错误处理更具有实用性,也有可能是我学艺不精,只是一个片面的理解,接下来,对Go中的错误处理做一个简短的总结,便利于之后使用

当一个函数或方法需要返回错误时,通常将错误作为最后一个返回值,例子如下:

func Open(name string) (*File, error) {
	return OpenFile(name, O_RDONLY, 0)
}

error是一个接口类型,默认零值为nil,所以说,当我们要判断一个程序是否发生了error,我们就将返回的错误与nil进行比较,我们经常使用以下的代码:

file, err := os.Open("./xx.go")
if err != nil {
	fmt.Println("打开文件失败,err:", err)
	return
}

在一些理解中,对于文件的读入,读出,增删改查等一类操作都需要进行错误判断。

fmt.Errof

需要经常使用的一个函数,当我们需要知道格式化的错误描述信息时,我们就要使用这个函数进行

例如:

fmt.Errorf("查询数据库失败,err:%v", err)

这个函数我们得到的仅仅是我们包装之后的错误类型,当然,并不能排除其它的错误类型没有发生

所以,为了不丢失函数调用的错误全部类型,我们需要在使用fmt.Error的时候使用%w格式化进行修饰,实现基于已有的错误再包装一个得到的新的错误

fmt.Errorf("查询数据库失败,err:%w", err)

对于二次包装的错误,errors包还有其它三种方法

Unwarp:获得err包含下一层错误 

Is:判断err是否包含target

As:判断err是否为target类型

func Unwrap(err error) error                 // 获得err包含下一层错误
func Is(err, target error) bool              // 判断err是否包含target
func As(err error, target interface{}) bool  // 判断err是否为target类型

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值