手记

Go 的奇妙旅程:Go 中处理错误

引入

我相信在你编写 Go 代码的时候,你肯定遇到过内置 error 类型。Go 代码使用 error 来指示异常状态。例如,当你使用 os.Open 函数但 Go 无法打开文件时,err 就会为非 nil 值。

func Open(name string) (file *File, err error)
复制代码

以下代码用于在 os.Open 打开文件的错误捕捉。如果发生错误,它将调用 log.Fatal 以打印错误消息并停止程序的运行。

f, err := os.Open("filename.ext")
if err != nil {
    log.Fatal(err)
}
复制代码

在编程语言领域,通常 异常(Exception) 这一术语所描述的是一种数据结构,该数据结构可以存储异常的相关信息。异常处理的常见的一种机制是移交控制权。引发 raise exception(某些语言中也称之为 throw exception)。异常抛出后,控制权会被移交至某处的接 catch,并执行处理。

如果我们不处理异常,则有可能会影响用户体验(比如说会让用户访问到本该不可访问到的信息,或让应用程序崩溃)。捕捉异常并处理异常是程序员们的家常便饭,当然,在此之后,我们大多会将异常信息上传至服务器以供后续分析。

Go 错误捕捉

Go 语言通过内置的错误接口提供了非常简单的错误处理机制。

error 类型是一个接口类型,这是它的定义:

type error interface {
    Error() string
}
复制代码

我们可以在编码中通过实现 error 接口类型来生成错误信息。

函数通常在最后的返回值中返回错误信息。使用 errors.New 可返回一个错误信息:

func Sqrt(f float64) (float64, error) {
    if f < 0 {
        return 0, errors.New("math: square root of negative number")
    }
}

作者:Hoarfroster
链接:https://juejin.cn/post/6953225665495695374
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0人推荐
随时随地看视频
慕课网APP