Go panic recover


 

先看看panic是干什么的

執行到panic的地方,會出現異常。后面的代碼不會執行,加了defer,panic之前會執行defer,加了recover會修復后繼續執行

defer要在可能引發panic之前定義

recover()必須搭配defer使用

import (
    "fmt"
)

func f1() {
    fmt.Println("run f1")
}

func f2() {
    fmt.Println("run f2")
     panic("出現嚴重錯誤!")
    fmt.Println("run after")
}
func f3() {
    fmt.Println("run f3")
}
func main() {
    f1()
    f2()
    f3()
}

運行結果:

run f1
run f2
panic: 出現嚴重錯誤!

.....后面不執行

 

如果出錯前,還要關閉連接等

func f1() {
    fmt.Println("run f1")
}

func f2() {
    fmt.Println("打開數據庫連接...")
     defer func(){
        fmt.Println("釋放數據庫連接...")
    }()
     panic("出現嚴重錯誤!")
    fmt.Println("run after")
}
func f3() {
    fmt.Println("run f3")
}
func main() {
    f1()
    f2()
    f3()
}

輸出結果:

run f1
打開數據庫連接...
釋放數據庫連接...
panic: 出現嚴重錯誤!

........后面不執行

 

 

加上recover

func f1() {
    fmt.Println("run f1")
}

func f2() {
    fmt.Println("打開數據庫連接...")
    defer func(){
        err := recover()
        fmt.Println(err)
        fmt.Println("釋放數據庫連接...")
    }()
    panic("出現嚴重錯誤!")
    fmt.Println("run after")
}
func f3() {
    fmt.Println("run f3")
}
func main() {
    f1()
    f2()
    f3()
}

 

執行結果

run f1
打開數據庫連接...
出現嚴重錯誤!
釋放數據庫連接...
run f3

 


免責聲明!

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



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