【发布时间】:2013-03-13 22:06:40
【问题描述】:
有没有办法清理这个 (IMO) 看起来很可怕的代码?
aJson, err1 := json.Marshal(a)
bJson, err2 := json.Marshal(b)
cJson, err3 := json.Marshal(c)
dJson, err4 := json.Marshal(d)
eJson, err5 := json.Marshal(e)
fJson, err6 := json.Marshal(f)
gJson, err4 := json.Marshal(g)
if err1 != nil {
return err1
} else if err2 != nil {
return err2
} else if err3 != nil {
return err3
} else if err4 != nil {
return err4
} else if err5 != nil {
return err5
} else if err5 != nil {
return err5
} else if err6 != nil {
return err6
}
具体来说,我说的是错误处理。能够一次处理所有的错误就好了。
【问题讨论】:
-
标题是关于错误处理的,但你似乎是在返回它们而不是去panic(),有什么原因吗?也因为 1 Marshall 失败后没有立即返回?
-
为什么我要使用 panic() 而不是返回错误?从您链接到的文档中:“向调用者报告错误的通常方法是将错误作为额外的返回值返回。”我觉得这是一个“通常”的情况。使用 panic() 感觉合理,这并不是一个如此严重的错误。 (如果我误解了恐慌功能的用例,请纠正我。)
-
我知道你因为陈述每个 gopher 都会同意的内容而不是使用/滥用恐慌而获得了投票,但上面的代码示例真的很糟糕/含糊不清。元帅一切,但只返回我们之后看到的第一个错误?但是随后您澄清了“一次性处理所有错误”,主要是使代码示例无效。同样,这取决于您在做什么,并且恐慌/恢复可能是合适的。就个人而言,我会在失败的元帅上立即出错,并且更描述
cJson失败,并附上err。但即便如此,这也取决于运行的环境。 -
好点。我给出的代码模棱两可。我会在每个 marshall 之后检查一个错误——唯一阻止我的是我认为将 marshall 调用组合在一起看起来更整洁。 IMO,并非所有错误都会返回并不重要。我所追求的行为是“返回第一个非零错误。”
标签: go