多谢指导,捕获住异常后就可以正常执行完main函数了。
修改后的一种情况:
package main
import (
"fmt"
"time"
)
func do() int {
//这里并不能获取da函数中的panic
defer func() {
if err := recover();err != nil{
fmt.Println("do recover err: ", err)
} else {
fmt.Println("do err is nil");
}
} ()
fmt.Println("do invoke da return ", da())
fmt.Println("do before sleep")
time.Sleep(1*time.Second)
fmt.Println("do after sleep")
return 1
}
func da() int{
fmt.Println("---------- start da ----------")
defer func() {
if err := recover();err != nil{
fmt.Println("da recover err: ", err)
} else {
fmt.Println("da err is nil");
}
} ()
panic("panic da")
for i := 0; i<10; i++{
fmt.Println("da i = ", i)
}
fmt.Println("---------- end da ----------")
return 1
}
func main() {
fmt.Println("============= Start =============");
fmt.Println("do return ", do())
fmt.Println("da return ", da())
fmt.Println("============= End =============");
}
输出:
============= Start =============
---------- start da ----------
da recover err: panic da
do invoke da return 0
do before sleep
do after sleep
do err is nil
do return 1
---------- start da ----------
da recover err: panic da
da return 0
============= End =============