[英]How to return from function with some error checking in Go
我要加載多個數據,如果其中之一失敗,則必須記錄錯誤,而不能繼續運行代碼。
這個代碼可以嗎? 以及如何做到這一點?
func (worker *Worker) GetData() error {
err := worker.LoadModelA()
if err != nil && worker.LogError() // LogError alway return true
return err
err = worker.LoadModelB()
if err != nil && worker.LogError() // LogError alway return true
return err
return err
}
出現A錯誤(在Go Playground上嘗試),輸出:
LoadModelA
2009/11/10 23:00:00 LogError
2009/11/10 23:00:00 Error LoadModelB
B錯誤(在Go Playground上嘗試),輸出:
LoadModelA
LoadModelB
2009/11/10 23:00:00 LogError
2009/11/10 23:00:00 Error LoadModelB
沒有錯誤(在Go Playground上嘗試),輸出:
LoadModelA
LoadModelB
Done.
main Done.
這是代碼:
package main
import (
"fmt"
"log"
)
func (worker *Worker) GetData() error {
if err := worker.LoadModelA(); err != nil {
worker.LogError()
return err
}
if err := worker.LoadModelB(); err != nil {
worker.LogError()
return err
}
fmt.Println("Done.")
return nil
}
func main() {
w := &Worker{}
err := w.GetData()
if err != nil {
log.Fatal(err)
}
fmt.Println("main Done.")
}
type Worker struct{}
func (w *Worker) LoadModelA() error {
fmt.Println("LoadModelA")
return nil
//return fmt.Errorf("Error LoadModelB")
}
func (w *Worker) LoadModelB() error {
fmt.Println("LoadModelB")
return nil
//return fmt.Errorf("Error LoadModelB")
}
func (w *Worker) LogError() error {
log.Println("LogError")
return nil
}
只需少量的“幾個”即可
func (worker *Worker) GetData() (err error) {
if err = worker.LoadModelA(); err == nil {
if err = worker.LoadModelB(); err == nil {
return
}
}
worker.LogError()
return
}
在大量情況下,您可以遍歷struct的字段
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.