[新手学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

相关文章
相关标签/搜索