從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