小编kar*_*sur的帖子

为什么 go panic 恢复到带有局部变量的返回值不起作用?

紧急恢复代码适用于命名的返回值。

func main() {
    result, err := foo()
    fmt.Println("result:", result)
    if err != nil {
        fmt.Println("err:", err)
    }
}

func foo() (result int, err error) {
    defer func() {
        if e := recover(); e != nil {
            result = -1
            err = errors.New(e.(string))
        }
    }()
    bar()

    result = 100
    err = nil
    return
}

func bar() {
    panic("panic happened")
}
Run Code Online (Sandbox Code Playgroud)

输出

result: -1
err: panic happened
Run Code Online (Sandbox Code Playgroud)

但是为什么这段带有局部变量的代码不起作用?

func main() {
    result, err := foo() …
Run Code Online (Sandbox Code Playgroud)

recover go panic

2
推荐指数
2
解决办法
102
查看次数

标签 统计

go ×1

panic ×1

recover ×1