painc是一個內建函數,可以中斷原有的控制流程,進入一個“恐慌”的流程(就是意思我遇到問題了,不知道該咋辦,我好慌),這個過程稱爲錯誤處理流程。
恐慌可以直接調用painc產生,也可以由運行時的錯誤產生,例如數組越界等。
painc()函數能接受任何類型的數據。格式如下。
例如:
painc(404)
painc("error")
painc(Error("file not exists"))
通俗點講,就是你遇見問題了 painc會終止程序,你沒有在程序中添加任何其他措施的話,就打印painc的詳細或者內容,然後程序停止運行。但是前面無論產生什麼錯誤都不會影響到defer的執行
func main() {
defer func() {
fmt.Println("test")
panic("defer painc") //執行打印defer painc後程序就終止運行了後面的都沒執行
fmt.Println("test1") //未執行
}()
fmt.Println("測試")
panic("test painc") //執行打印test painc後 程序就終止運行了後面的都沒執行
fmt.Println("測試1") //未執行
x() //未執行
}
func x() {
fmt.Println("x")
}
輸出結果如下:
可以看出painc的結果都被輸出到 painc下面了,測試1和test1及x函數都沒有執行,除了defer沒有影響,但是defer中的painc也終止了。