首頁 >後端開發 >Golang >Golang異常處理中的panic和recover

Golang異常處理中的panic和recover

WBOY
WBOY原創
2024-04-15 18:15:02403瀏覽

在 Go 中,Panic 和 Recover 用於異常處理。 Panic 用來報告異常,Recover 用來從異常中恢復。 Panic 會停止程式執行,拋出一個 interface{} 類型的例外值。 Recover 可以從延遲函數或 goroutine 捕獲異常,傳回它拋出的 interface{} 類型的異常值。

Golang異常處理中的panic和recover

Go 語言異常處理中的Panic 和Recover

在Go 語言中,panicrecover 關鍵字是例外處理的重要機制。 panic 用於報告異常,而 recover 用於從異常中恢復。

Panic

panic 關鍵字用於報告一個異常條件,它會立即停止程式執行,並列印堆疊資訊。使用 panic 時,程式會拋出一個 interface{} 類型的例外。例如:

package main

func main() {
    panic("发生了异常")
}

Recover

recover 關鍵字用於從 panic 中復原。它可以從目前 goroutine 傳回一個 interface{} 類型的異常值。 recover 只能在延遲函數或 goroutine 中使用。例如:

package main

import "fmt"

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("捕获到异常:", r)
        }
    }()
    panic("发生了异常")
}

實戰案例

假設我們有一個函數divide,它計算兩個數的商數:

func divide(a, b int) float64 {
    if b == 0 {
        panic("除数不能为零")
    }
    return float64(a) / float64(b)
}

為了處理divide 函數中可能發生的異常,我們可以使用recover 關鍵字:

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("捕获到异常:", r)
        }
    }()

    fmt.Println(divide(10, 2))
    fmt.Println(divide(10, 0))
}

輸出:

5
捕获到异常: 除数不能为零

以上是Golang異常處理中的panic和recover的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn