簡體   English   中英

如何在Go中進行一些錯誤檢查以從函數返回

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM