2 回答

TA贡献1828条经验 获得超13个赞
您不需要立即返回错误,只需检查最后的所有错误并返回自定义错误,或者您可以返回 @Marc 提到的最后一个错误
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贡献1921条经验 获得超9个赞
非致命错误的一种简单解决方案(即:可以继续的错误)是保存最后一个非零错误。
例如:
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
}
在函数结束时,随意返回lastErr
。
该主题的其他变体包括:
firstErr
(如果不是,请不要覆盖nil
)一片错误(为每个非零错误附加到它)
更结构化:将错误与您返回的数据一起保存。即:有一个
about.Errors []error
字段,甚至每个操作都有一个字段:about.Errors map[string]error
并保存每个错误:about.Errors["memory"] = errFromMemoryLookup
如果您想了解错误以及实际信息,您可能应该使用最后一个。
- 2 回答
- 0 关注
- 133 浏览
添加回答
举报