golang恐慌(panic)和恢復(recover)


Go 沒有像 Java 那樣的異常機制,例如你無法像在 Java 中那樣拋出一個異常。作為替代,它使用了恐慌和恢復(panic-and-recover)機制。一定要記得,這應當作為最后的手段被使用,你的代碼中應當沒有,或者很少的令人恐慌的東西。

  • panic

是一個內建函數,可以中斷原有的控制流程,進入一個令人恐慌的流程中。當函數 F 調用 panic,函數 F 的執行被中斷,並且 F 中的延遲函數會正常執行,然后 F 返回到調用它的地方。在調用的地方, F 的行為就像調用了 panic。這一過程繼續向上,直到程序崩潰時的所有 goroutine 返回。恐慌可以直接調用 panic 產生。也可以由運行時錯誤產生,例如訪問越界的數組。

  • recover

是一個內建的函數,可以讓進入令人恐慌的流程中的 goroutine 恢復過來。 recover僅在延遲函數中有效。在正常的執行過程中,調用 recover 會返回 nil 並且沒有其他任何效果。如果當前的 goroutine 陷入恐慌,調用 recover 可以捕獲到 panic 的輸入值,並且恢復正常的執行。recover只有在defer調⽤的函數中有效

package main
import "fmt"

func Demo(i int) {
    //定義10個元素的數組
    var arr [10]int
    //錯誤攔截要在產⽣錯誤前設置
    defer func() {
        //設置recover攔截錯誤信息
        err := recover()
        //產⽣panic異常 打印錯誤信息
        if err != nil {
            fmt.Println(err)
        }
    }()
    //根據函數參數為數組元素賦值
    //如果i的值超過數組下標 會報錯誤:數組下標越界
    arr[i] = 10
}

func main() {
    Demo(10)
    //產⽣錯誤后 程序繼續
    fmt.Println("程序繼續執⾏...")
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM