如何使用panic修改返回值并在golang中恢复

Mic*_*ith 5 go

我有一个问题如何修改返回值与恐慌和恢复在golang请帮帮我,谢谢!

func foo1() int {

    defer func() {
        if p := recover(); p != nil {
            fmt.Printf("internal error: %v\n", p)
        }
        // how can I do?
    }()

    panic("test error")
    return 10
}
Run Code Online (Sandbox Code Playgroud)

小智 7

一种方法是在func定义中命名返回值

package main

import "fmt"

func foo() (r int) {
    defer func() {
        if p := recover(); p != nil {
            fmt.Printf("internal error: %v\n", p)
            r = 5 // this modify the return value
        }
    }()

    panic("test error")
    return 3
}

func main() {
    fmt.Println(foo()) // this print 5
}
Run Code Online (Sandbox Code Playgroud)