golang panic and recover
2015-04-07 09:43
549 查看
panic 是一个内置函数,当一个函数 F 调用 panic,F 的执行就会停止,F 中 deferred 函数调用会被执行,然后 F 返回控制到它的调用者。这个过程会沿着调用栈执行下去,直到当前 goroutine 中的所有函数返回,然后程序 crash。出现 panic 是因为: 调用了 panic 函数 出现了运行时错误(例如,数组越界访问) recover 是一个内置函数,用于恢复一个 panicking goroutine 的控制。需要注意的是,recover 只能使用在 deferred 函数中。如果当前的 goroutine panicking,recover 调用将会捕获 panic 传递的值并且恢复正常的执行。看一个例子: package main import "fmt" func main() { f() fmt.Println("Returned normally from f.") } func f() { defer func() { if r := recover(); r != nil { fmt.Println("Recovered in f", r) } }() fmt.Println("Calling g.") g(0) fmt.Println("Returned normally from g.") } func g(i int) { if i > 3 { fmt.Println("Panicking!") panic(fmt.Sprintf("%v", i)) } defer fmt.Println("Defer in g", i) fmt.Println("Printing in g", i) g(i + 1) } 此程序输出: Calling g. Printing in g 0 Printing in g 1 Printing in g 2 Printing in g 3 Panicking! Defer in g 3 Defer in g 2 Defer in g 1 Defer in g 0 Recovered in f 4 Returned normally from f.
相关文章推荐
- Golang异常处理-panic与recover
- golang基础-new_make、recover_panic、append、闭包
- golang panic recover
- golang中recover和panic用法, goland里的try catch
- golang之defer、panic、recover
- golang错误处理之panic和recover
- Golang中的defer, panic, recover
- Golang 中的 panic 与 recover 理解
- golang用panic和recover做业务流程中断的尝试
- golang recover panic 流程控制的可达与不可达
- 【GoLang】panic defer recover 深入理解
- golang中的defer panic recover
- golang recover from panic situation: - reflect: call of reflect.Value.Elem on struct Value
- golang 使用defer、panic、recover的问题
- Golang中的panic和recover
- GOLANG的PANIC和RECOVER
- golang中recover和panic用法
- Golang的panic和recover
- Golang panic recover
- golang中recover和panic用法