昨天的Golang程式,自行產生了錯誤.
今天來看一下Golang的錯誤處理機制.
// hello51
package main
import (
"fmt"
)
func rocket_fire() {
defer func() {
if err := recover(); err != nil {
fmt.Println("華麗的變身不只是好看而已,月光能量灑滿整個背部,正義的魔法杖將劈開黑暗!")
fmt.Println("空中的事情交給我們解決,月亮的使者‧月光刑警!還有助手美茄子刑警,一同登場!")
}
}()
fmt.Println("倒數計時開始!")
for i := 10; i >= 1; i-- {
discount(i)
}
fmt.Println("發射!!")
}
func discount(dis int) {
if dis == 5 {
fmt.Println(dis)
panic("休士頓! 我們這裡有麻煩了!")
} else {
fmt.Println(dis)
}
}
func main() {
fmt.Println("火箭測試程式開始!")
rocket_fire()
fmt.Println("火箭測試程式結束!")
}
執行結果:
./hello51
火箭測試程式開始!
倒數計時開始!
10
9
8
7
6
5
華麗的變身不只是好看而已,月光能量灑滿整個背部,正義的魔法杖將劈開黑暗!
空中的事情交給我們解決,月亮的使者‧月光刑警!還有助手美茄子刑警,一同登場!
火箭測試程式結束!
******** 華麗的分隔線 ********
可以看到程式能夠正常結束!
這種特殊的情況,就要請特殊刑警課出動了.
空中的事情就交給能夠華麗的變身的月光刑警!還有助手美茄子刑警!
Golang有一個defer指令,在前面有介紹過,就像月光刑警能華麗的變身一樣.
當要脫離函數時,defer後面的函數才會執行.
搭配助手recover()函數,當有錯誤時,進行相對應處理,讓系統正常結束.
當錯誤沒發生時,就不需變身出動.
一般應用情境,簡單一點就是寫訊息到log.然後正常脫離.