2017-01-27 25 views
0

encoding/csvのゴラン文書では、WriteAllWriteに指定されたCSVレコードが記載されており、基礎となるライターのFlushを呼び出します。/csv:WriteAll()でError()を使用する必要がありますか?

ここで、WriteAllのエラーを返すか、Error()の方法でエラーを検出するのか混乱しています。理由を説明しましょう。

  • Writeerrorを返します。これにより、戻り値に基づいてエラーを検出できると考えられます。
  • Flusherrorを返しません。ドキュメントでは、「フラッシュ中にエラーが発生したかどうかを確認するには、エラーを呼び出します。
  • WriteAllエラー処理については何も言及していませんが、errorを返し、WriteFlushの両方を実行すると記載しています。ドキュメントは、このように書き例が含ま:

    w := csv.NewWriter(os.Stdout) 
    w.WriteAll(records) // calls Flush internally 
    
    if err := w.Error(); err != nil { 
        log.Fatalln("error writing csv:", err) 
    } 
    
  • Error()自体を述べた:「エラーが前書き込みまたはフラッシュ中に発生したエラーを報告します。」 (強調する鉱山)。

私はコードを見て、私が慣れていないいくつかのフェナニガンを見たので、私はその問題をSOに変えています。

これはどちらですか?返されたerrorを見てください。 w.Error()を使用する必要がありますか?私は両方を使うべきですか?違いは何ですか?

+0

Write/WriteAllによって返されたエラーを無視しないでください。/csvをエンコードする例は説明的です。 – Sridhar

+0

これは公式ドキュメントにあります! – FrontierPsycho

答えて

0

限り私はあなたの両方を使用することができます見ることができるように、私は、これは、外出先でより一般的である

err := w.WriteAll(records) 

からエラーを使用することを提案します。

返されるすべてのエラーは* bufio.Writerからのもので、失敗した場合は常にエラーが返されます。したがって、w.WriteAllがエラーを返した場合、Error()の呼び出しはエラーも返します。

+0

ありがとうございます。私はこれが非常に一般的なパターンであることを知っています。そのため、この例題が別のアプローチを使用しているのが分かりました。私は、返されたエラーでいくつかのエラーが見つからないかどうか、メソッドがキャッチするのだろうかと思います。おそらく、 'Flush'がスローされたように。 – FrontierPsycho

関連する問題