iT邦幫忙

DAY 2
0

蠻可愛的 Golang系列 第 2

空中的事情交給我們解決!

昨天的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.然後正常脫離.


上一篇
休士頓! 我們有麻煩了!
下一篇
處理除以零錯誤的方法
系列文
蠻可愛的 Golang30

1 則留言

0
mis2000lab
iT邦好手 1 級 ‧ 2014-10-02 19:39:09

月光刑警

看到標題......果然是月光刑警出場了

阿兩粉絲 敬上

我要留言

立即登入留言