从 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... }
Panic 和 Defer 的概念
代码中的修改:
通过这些更改,如果您的 getReport 函数由于无效的报告格式而发生恐慌,它将返回错误。错误消息将是紧急值(如果是字符串)或指示未知紧急的一般错误。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3