📌  相关文章
📜  go blog defer panic recovery - Go 编程语言 - Go 编程语言(1)

📅  最后修改于: 2023-12-03 14:41:32.051000             🧑  作者: Mango

Go Blog:Defer、Panic 与 Recovery

介绍

文章简述 Go 编程语言中的 deferpanicrecovery 这三个关键字的使用方式与用途。

Defer

defer 语句用于保证一个函数调用在程序执行结束前执行。常用于资源清理等操作,也常用于函数调用后执行某些必要的操作。

defer 语句的语法格式如下:

defer function_name()

比如我们使用了一个 os.File 类型的变量 file,在函数返回之前需要关闭这个文件,那么就可以使用 defer 语句:

func readFromFile() {
    file, err := os.Open("example.txt")
    if err != nil {
        // ...
    }
    defer file.Close()

    // 在此处使用 file 进行读取操作
}

可以看到,使用 defer 关闭 file 的操作在函数返回之前执行,确保资源得到正确地释放。

Panic

panic 用于程序发生错误时进入一个恐慌状态,可以认为是一个抛出异常的过程。panic 接受一个参数,通常为 error 类型的实例。

func someFunc() {
    if someCondition {
        panic("some error occurred")
    }

    // ...
}

在上述代码中,如果 someCondition 为真,则会使程序进入 panic 状态,并抛出一个字符串类型的错误信息。

Recovery

recovery 用于恢复 panic 引起的程序恐慌,使得程序可以继续执行。需要注意的是,recovery 只能在 defer 函数中使用。

func recoverFromPanic() {
    defer func() {
        if err := recover(); err != nil {
            // 在此处处理 panic 引起的异常
        }
    }()

    // 可能会引起恐慌的代码
}

在上述代码中,如果 可能会引起恐慌的代码 引起了 panic 异常,那么 defer 函数中的 recover 调用会捕捉到此异常,从而使程序恢复正常状态。

总结

通过本文的介绍,我们了解了 Go 编程语言中的 deferpanicrecovery 这三个关键字的用途和使用方式。熟练掌握这些关键字可以帮助我们写出更健壮且易维护的代码。