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

时间:2017-11-12 15:59:02

标签: go

我有问题 如何使用panic修改返回值并在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
}

1 个答案:

答案 0 :(得分: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
}