Go でエラーのスタックトレースを出す
Go でエラーのスタックトレースを出す方法のメモ
下記の記事を参考にした。
今goのエラーハンドリングを無難にしておく方法(2021.09現在)
pkg/errors を使う。
参考記事では
① pkg/errors.WithStackをつかうパターン
エレガントな実装だけど、stacktraceつけ忘れがち② pkg/errors.Wrapをしまくるパターン
ちょっと強引な実装だけど、stacktraceつけ忘れにくい
と紹介されている。私は個人開発なので①の方法でやることにする。
実装に際しては、外部ライブラリから返ってきたエラーのエラーメッセージは保持しつつ、独自に定義したエラーでラップしたかったので、これがいいのかわからないが下記のようにした。
まず internal/errors/errors.go にエラーを定義する。
|
|
次に使用する場合だが、下記のように「独自定義したエラーに、外部ライブラリから返ってきた元のエラーのエラーメッセージをくっつけて、それにスタックトレースをつける」という方法で生成したエラーを投げる。
|
|
最後にエラーの書き出し場所でスタックトレースを出すようにする。
|
|
これで、たとえば 38 行目で Limit(limit + 1)
となっているところを Limit(-1)
にしてわざとエラーを出すと下記のようなログが書き出される。
12 行目に元のエラーのログが書き出されている。
|
|
以上