[新手學Go]Go語言的defer

defer:主要是用來處理錯誤。例如某個程序在運行時出現異常而下面還有事物須要處理,傳統的語言遇到錯誤會當即終止程序活動。而go則引入了完美的容錯機制——defer來處理異常錯誤 html

譬如: golang


package main

import (
	"fmt"
)

func main() {
	A()
	B()
	C()
}

func A() {
	fmt.Println("func A")
}

func B() {
	defer func() {
		if err := recover(); err != nil {
			fmt.Println("recover in B")
		}
	}()  //defer必須放在panic以前
	panic("panic in B")
}

func C() {
	fmt.Println("func in B")
}
運行結果:
 func A
recover in B
 func in B


defer必須放在panic以前,若是以後則不會運行,由於Panic運行以後就會終止程序的活動,那麼defer就根本沒有機會來運行,因此把defer定義在panic以前就能夠提早告訴系統:我這裏有defer了,有錯誤處理了。若是遇到panic我程序會自動記錄,但程序能夠接着幹活。 spa

Go中引入的Exception處理:defer(後進先出,先進後出), panic, recover。(容錯三劍客),在上面代碼中有使用; code

推薦閱讀:http://bbs.mygolang.com/thread-406-1-1.html (你真的懂defer?)
               http://developer.51cto.com/art/201306/400489.htm  (Go語言中使用Defer幾個場景
htm

相關文章
相關標籤/搜索