タグ

errorに関するdmizuno55のブックマーク (6)

  • 今goのエラーハンドリングを無難にしておく方法(2021.09現在)

    2021年7月現在、goでエラーハンドリングってどうやって扱うのが無難なのかについて、いろいろと調べました。 昔から人気な pkg/errors、Go公式がメンテナンスしていたxerrors、 go v1.13から追加されたfmt.Errorfなどエラーハンドリングの選択肢がいろいろとあるので、stacktrace欲しい場合とそうでない場合で個人的にベストだと思った方法をまとめました。 エラーハンドリングに求める要件 エラーが発生した箇所を追える エラーの原因によって処理を分岐する (場合による)stacktraceがみれる 結論 stacktraceが不要な場合 fmt.Errorfでラップし、errors.Isで判定する stacktraceが必要な場合 pkg/errors.Wrapでラップし、pkg/errors.Causeで判定する log.Printf("%+v", err)で

    今goのエラーハンドリングを無難にしておく方法(2021.09現在)
  • Nodeのエラーハンドリング(unhandledRejectionとuncaughtException)について - Qiita

    process.on('uncaughtException', (err) => { fs.writeSync(1, `Caught exception: ${err}\n`); }); どこにもキャッチされずにprocessまで来てしまったエラーをキャッチ。 NodeJSのデフォルト(上記のようにハンドリングしない場合)では、このようなエラーはスタックトレースに出力して終了。 リスナーの関数はerrだけ。 注意点 このハンドリングでエラーがcatchされた場合、処理を継続すべきではない。 完全に想定外の状態になっていることを意味しているので、ここから無理やり復帰しようとして更なるエラーが起きる可能性がある。 例えるなら「コンピュータのアップグレード時にコンセントを抜くようなもの」。その意は「10回中9回は問題ないかもしれないが、1回はシステム破壊が起きる」。 ハンドリング内の処理でさらに

    Nodeのエラーハンドリング(unhandledRejectionとuncaughtException)について - Qiita
  • Goで独自エラー型を定義する - Qiita

    Goでのエラー判別という記事で、Goのエラーの判別方法にはだいたい3種類あるという話をしました。 どの関数から返されたかで判別 定義済みの変数と比較して判別 独自エラー型を定義してキャストして判別 今回の記事では3の独自エラー型を定義する際のノウハウについて扱います。 ※ Go2アドベントカレンダーのGoのカスタムエラーとその自動生成についてという記事とかなり内容が被っている気がしますが、ネタかぶりはご容赦ください。 generrはすごく良いツールだと思います!この記事のコードを自動生成したい場合にご利用ください。 それではいくつかの実装例を紹介します。 例1: エラーコードを持たせる 例えばエラーコードを持たせたい場合を考えます。 この場合、エラーコード型にそのままerrorインターフェースを持たせてしまえばいいでしょう。 GoのエラーはインターフェースなのでErrorメソッドさえ持たせ

    Goで独自エラー型を定義する - Qiita
  • Swift 4.0 エラー処理入門 - Qiita

    はじめに Swiftのエラー処理について初心者ながら記述方法を整理してみます。 記事はSwift 4.0に対応しています。 エラー処理とは 以下のようにメソッドで何らかのエラーが発生した場合に呼び出し元へエラーとして返すことができます。 // エラーを持つメソッド func methodA(text: String) throws { if text.isEmpty { throw NSError(domain: "errorメッセージ", code: -1, userInfo: nil) } print(text) } // 呼び出し元メソッド func method() { do { try? methodA(text: "") } catch { // エラー処理 } } プロトコルError 上記の例ではNSErrorをエラーとしましたが、これはNSErrorもErrorプロトコ

    Swift 4.0 エラー処理入門 - Qiita
  • Goの新しいerrors パッケージ xerrors - Qiita

    先日 xerrors パッケージがリリースされました。 このパッケージは、Proposal: Go 2 Error Inspection で提案されているものをGo1向けに外部ライブラリとして試験的に実装したものです。 Goの標準ライブラリではありませんが、Go公式がメンテナンスをしています。 このパッケージができた背景は、今まで多くのGoエンジニアは下位層のエラーの情報を伝播させるために pkg/errors パッケージ などの外部ライブラリを利用していました。この手法が開発者の間で普及したため標準ライブラリで正式に検討を始めることとなりました。 2019/9/4更新 Go 1.13では %w でのラップや Is メソッド、 As メソッドは正式に導入されました。 しかし%+w や %+v によるスタックトレースの表示の採用は見送られました。 スタックトレースの表示が必要な場合はxerr

    Goの新しいerrors パッケージ xerrors - Qiita
  • Goのカスタムエラーとその自動生成について - asterisc

    はじめに この記事はGo2アドベントカレンダー14日目の記事です。 GoErrorハンドリングについては、これまでにも様々なパターンが発表されてきました。 今回は独自定義のエラーについて、これまでのパターンをまとめた上で、その実現をeasyにするgenerrというツールを作ったので、その紹介をします。 github.com Goのカスタムエラー Goのエラーハンドリングの中で、カスタムなerror型を用いるパターンは比較的広く知られているかと思います。 その中からいくつかのパターンを紹介します。 sentinel errorsパターン Goerrorはinterfaceとして定義されており、Error() stringのメソッドを実装さえしていれば、errorとして扱うことができます。 標準パッケージで提供されているerrorsやfmt.Errorfを用いて簡単にエラーを表現することが

    Goのカスタムエラーとその自動生成について - asterisc
  • 1