为何recover 捕捉不到异常呢?

请大神指点迷津啊!

        func sql01() {
        var id []byte
        一条会出错的sql语句,包含没有转义的单引号,会发生异常
        sql := "select id from qiuduiku where name='ha'ha'"
       a, _ := db.Prepare(sql)
        a.QueryRow().Scan(&id)
        a.Close()
        //下面是捕捉异常的recover函数
        defer func() {
        if r := recover(); r != nil {
       fmt.Println("aaa")
       }
       }()
        }

运行后程序崩溃退出,但是为什么并没有捕捉到异常,打印出:aaa 呢???

下面是崩溃后的截图:
请大神指点,为何defer中的recover捕获不到异常???

共 3 个回复


heimeil

defer放前面,你这还没到defer就panic了

# 0

zsg

这是为什么?我也遇见了

# 1

slclub

recorver 必须放在一个defer 函数内
且要放在panic 之前
必须经过这 么一个函数栈调用才可以。

defer func() {
if r:= recover ) {
fmt.Println("FROM PANIC ERROR:",r)
}
}
# 2