donglin7979 2017-11-12 15:59
浏览 64

如何用恐慌修改返回值并在golang中恢复

This question already has an answer here:

I have a problem how to modify return value with panic and recover in golang please help me, thank you!

func foo1() int {

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

    panic("test error")
    return 10
}
</div>
  • 写回答

1条回答 默认 最新

  • duanmeng1950 2017-11-12 16:11
    关注

    one way to do it is naming the return value in the func definition

    package main
    
    import "fmt"
    
    func foo() (r int) {
        defer func() {
            if p := recover(); p != nil {
                fmt.Printf("internal error: %v
    ", p)
                r = 5 // this modify the return value
            }
        }()
    
        panic("test error")
        return 3
    }
    
    func main() {
        fmt.Println(foo()) // this print 5
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化