GolangDefer, Panic, and Recover

Posted code_kd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GolangDefer, Panic, and Recover相关的知识,希望对你有一定的参考价值。

Go 有通常的控制流机制:if、for、switch、goto。它还具有在单独的 goroutine 中运行代码的 go 语句。在这里我想讨论一些不太常见的:延迟、恐慌和恢复。

defer 语句将函数调用推送到列表中。保存的调用列表在周围函数返回后执行。Defer 通常用于简化执行各种清理操作的函数。

例如,让我们看一下打开两个文件并将一个文件的内容复制到另一个文件的函数:

func CopyFile(dstName, srcName string) (written int64, err error) 
    src, err := os.Open(srcName)
    if err != nil 
        return
    

    dst, err := os.Create(dstName)
    if err != nil 
        return
    

    written, err = io.Copy(dst, src)
    dst.Close()
    src.Close()
    return

这有效,但有一个错误。如果对 os.Create 的调用失败,该函数将返回而不关闭源文件。这可以通过在第二个 return 语句之前调用 src.Close 来轻松解决,但如果函数更复杂,问题可能不会那么容易被发现和解决。通过引入 defer 语句,我们可以确保文件始终

以上是关于GolangDefer, Panic, and Recover的主要内容,如果未能解决你的问题,请参考以下文章

3.7 Go语言中的异常处理(Panic和recovering)

3.7 Go语言中的异常处理(Panic和recovering)

GoLang异常

Go语言在循环中panic后还能继续执行for循环?

ESXi4.1无法启动,提示panic :cannot open vpxa.vgz

Golang的一些学习