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