この(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()](http://golang.org/doc)の代わりにそれらを返すようです/effective_go.html#panic)、理由はありますか?また、マーシャル1が失敗した直後に即座に復帰しないこともありますか? – Deleplace
エラーを返すのではなく、なぜpanic()を使用するのですか?あなたがリンクしているドキュメントから: "呼び出し元にエラーを報告する通常の方法は、エラーを余分な戻り値として返すことです。"これは "普通の"ケースだと感じます。 panic()を使用すると正当性が感じられるような重大さのエラーではありません。 (パニック機能の使用例を誤解している場合は、私に修正してください。) –
私はあなたがすべてのgopherが同意するであろうこと、パニックを悪用するのではなく、上のコードサンプルが本当に悪い/あいまいであることを述べるためにupvotedを知っています。すべてをマーシャリングしますが、後で見る最初のエラーだけを返します。しかし、「一度にすべてのエラーを処理する」ことを明確にして、ほとんどコードサンプルを無効にします。繰り返しますが、あなたがやっていることと、パニック/リカバリが適切なことに依存しています。個人的には、私は失敗したマーシャルで直ちにエラーになり、 'cJson'が失敗し、'エラー 'に添付されていることをより具体的に説明します。しかし、それはこれがどこで実行されているのかというコンテキストにも依存します。 – dskinner