golang中提供panic用于错误处理。
当调用panic()时,正常的执行流程将停止。defer定义的操作还是会执行,然后一层一层向上返回,直到整个进程终止。
例如:
package main
import (
"fmt"
)
func main() {
foo()
}
func foo(){
defer func (){
fmt.Println("defer end...")
}()
panic("error test.....")
fmt.Println("END")
}
output:
$ ./orange
defer end… //defer定义的
panic: error test…..goroutine 1 [running]:
main.foo()
/home/lanyang/src/hello/orange.go:26 +0x8b
main.main()
/home/lanyang//src/hello/orange.go:13 +0x27
可以看到调用panic后,除了执行defer操作外,函数调用栈被逆向依次打印出来。