首页  >  文章  >  后端开发  >  如果 Go 函数发生紧急情况,如何返回错误?

如果 Go 函数发生紧急情况,如何返回错误?

Linda Hamilton
Linda Hamilton原创
2024-11-12 00:39:03258浏览

How to Return an Error if a Go Function Panics?

从 Go 中的 Defer 返回

您遇到了一个问题,如果 Go 中的函数发生紧急情况,您希望返回错误。以下是对您的代码的分析和修复:

func getReport(filename string) (rep report, err error) {
    rep.data = make(map[string]float64)

    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in f", r)
            switch x := r.(type) {
            case string:
                err = errors.New(x)
            case error:
                err = x
            default:
                err = errors.New("Unknown panic")
            }
            rep = nil // Invalidate rep
        }
    }()
    panic("Report format not recognized.")
    // rest of the getReport function...
}

恐慌和延迟的概念

  • 恐慌:恐慌信号可以通过延迟中的恢复捕获的运行时错误函数。
  • Defer: defer 语句延迟函数的执行,直到周围的函数退出。

代码中的修改:

  • defer 函数现在使用 switch-case 语句来处理恢复的值
  • 如果恢复的值是字符串,则使用errors.New() 将其转换为错误。
  • rep 变量在遇到错误后会失效,以确保它不会返回任何数据。
  • 如果出现错误,rep 变量将返回 nil,这与您的原始函数匹配签名。

通过这些更改,如果您的 getReport 函数由于无效的报告格式而发生恐慌,它将返回错误。错误消息将是恐慌值(如果是字符串)或指示未知恐慌的一般错误。

以上是如果 Go 函数发生紧急情况,如何返回错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn