2 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
您不需要立即返回錯(cuò)誤,只需檢查最后的所有錯(cuò)誤并返回自定義錯(cuò)誤,或者您可以返回 @Marc 提到的最后一個(gè)錯(cuò)誤
func About(c echo.Context) error {
about := newInfo()
memory, errMemory := getMemory()
if errMemory != nil {
log.Errorf("Failed to get memory %v", errMemory)
} else {
about.SystemInfo["memory"] = memory
}
version, errVersion := getVersion()
if errVersion != nil {
log.Errorf("Failed to get version details %v", errVersion)
} else {
about.Version = version
}
serialNo ,errSerial= getSerialInfo()
if errSerial != nil{
log.Errorf("Failed to get Product code %v", errSerial)
} else {
about.SerialNo = serialNo
}
network, errNet := localAddress()
if errNet != nil {
log.Errorf("Failed to get Network details %v", errNet)
} else {
about.Network = network
}
if errNet != nil || errSerial != nil || errVersion != nil || errMemory != nil {
// return a custom error, here
}
return c.JSON(http.StatusOK, about)
}

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
非致命錯(cuò)誤的一種簡(jiǎn)單解決方案(即:可以繼續(xù)的錯(cuò)誤)是保存最后一個(gè)非零錯(cuò)誤。
例如:
var lastErr err
mem, err := ....
if err != nil {
// Overwrite lastErr only if an error was encountered.
lastErr = err
}
version, err := ...
if err != nil {
lastErr = err
}
在函數(shù)結(jié)束時(shí),隨意返回lastErr
。
該主題的其他變體包括:
firstErr
(如果不是,請(qǐng)不要覆蓋nil
)一片錯(cuò)誤(為每個(gè)非零錯(cuò)誤附加到它)
更結(jié)構(gòu)化:將錯(cuò)誤與您返回的數(shù)據(jù)一起保存。即:有一個(gè)
about.Errors []error
字段,甚至每個(gè)操作都有一個(gè)字段:about.Errors map[string]error
并保存每個(gè)錯(cuò)誤:about.Errors["memory"] = errFromMemoryLookup
如果您想了解錯(cuò)誤以及實(shí)際信息,您可能應(yīng)該使用最后一個(gè)。
- 2 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報(bào)