首页 > 文章列表 > Golang异常处理中的try-catch-finally

Golang异常处理中的try-catch-finally

异常处理 异常捕获
241 2024-04-23

Go中的try-catch-finally用于异常处理,语法为:try:包含需要处理异常的代码,如出现异常立即转入catch或finally。catch:处理try中抛出的异常,如无异常不会执行。finally:无论是否异常都会执行,常用于清理资源。

Golang异常处理中的try-catch-finally

Golang 异常处理中的 try-catch-finally

在 Go 语言中,try-catch-finally 语句用于处理异常情况。以下是其语法:

func try() {
    defer recover() // 可选,用于捕获恐慌异常
    ... // 你的需要处理异常的代码
}

try

try 块包含需要处理异常的代码。如果出现异常,try 块中的语句将立即停止执行,并且执行流将转到 catch 块或 finally 块。

catch

catch 块用于处理 try 块中抛出的异常。如果 try 块中的代码没有抛出异常,则不会执行 catch 块。

catch 块的语法为:

func catch() {
    r := recover() // 捕获 `try` 块中的恐慌异常
    ... // 处理异常的代码
}

finally

finally 块无论 try 块是否抛出异常都会执行。它通常用于清理资源或执行其他收尾操作。

finally 块的语法为:

func finally() {
    ... // 清理资源或执行其他收尾操作
}

实战案例

以下是一个处理文件读取异常的示例:

import (
    "fmt"
    "io/ioutil"
)

func readFile(filename string) {
    defer recover()

    contents, err := ioutil.ReadFile(filename)
    if err != nil {
        panic(err)
    }

    fmt.Println(string(contents))
}

func main() {
    readFile("existing_file.txt")
    readFile("non_existing_file.txt")
}

在这个示例中,try 块包含读取文件 existing_file.txt 的代码。如果文件存在并且可以成功读取,则 try 块将正常执行,并且内容将被打印到控制台。

catch 块用于处理 try 块中可能发生的错误。如果文件不存在或无法读取,try 块将抛出一个异常,并且执行将转到 catch 块。在 catch 块中,异常被捕获,并打印到控制台。

finally 块是可选的,但它可以用于执行清理操作,例如关闭文件句柄。