Go语言中的异常处理

在上篇分析singleflight的相关资料中,看到有文章说“doCall方法巧妙的使用两个defer来区分调用函数异常与系统异常”。今天查找资料,学习一下Go的异常处理机制,目前的大概印象,只知道一个关键字panic

异常与错误

在Go语言中,错误被认为是一种可以预期的结果;而异常则是一种非预期的结果,发生异常可能表示程序中存在BUG或发生了其它不可控的问题。

Go 中主要通过 error 和 panic 分别表示错误和异常[2]

例如,从一个map查询一个结果时,可以通过额外的布尔值判断是否成功,属于一种预期的结果。

if v, ok := m["key"]; ok {
    return v
}

错误

error

Go中的错误类型:error

type error interface {
    Error() string
}

内置的 error 接口使得开发人员可以为错误添加任何所需的信息,error 可以是实现 Error() 方法的任何类型,具体例子可参考[2][5]。

Go中errors包提供了几个常用的函数,包括errors.New, errors.Is, errors.As, errors.Unwrap ,以及使用fmt.Errorf

erros.Is判断两个error是否相等,error.As判断err

你可能感兴趣的:(测试,java高阶框架,Python,java,python,golang,go,php)