有没有办法清理这个(IMO)可怕的代码?Go - 优雅地处理多个错误?
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
}
具体来说,我在谈论错误处理。能够一次处理所有错误将会很好。
标题是关于错误处理,但你似乎正在返回它们而不是[恐慌()](http://golang.org/doc /effective_go.html#panic),这是为什么?马歇尔一失败就马上不立即回国? – Deleplace 2013-03-13 23:39:00
为什么我会使用panic()而不是返回错误?从链接到的文档中:“向调用者报告错误的常用方法是将错误作为额外的返回值返回。”我觉得这是一个“常见”的情况。使用panic()感觉是合理的,这不是严重的错误。 (如果我误解了恐慌函数的用例,请纠正我。) – 2013-03-13 23:54:02
我知道你已经注意到了每个gopher会同意什么,不使用/滥用恐慌,但上面的代码示例非常糟糕/模糊。把所有东西都编成数字,但只返回我们之后看到的第一个错误?但是,接下来你会澄清“一次处理所有错误”,通常会使代码示例无效。这又取决于你的行为,恐慌/恢复可能是合适的。就我个人而言,我会立即在一位失败的元帅身上发现错误,并更具描述性地指出“cJson”失败,并附有“err”。但即使如此,仍取决于所运行的环境。 – dskinner 2013-03-14 14:02:12