エラーをスタックトレースも含めて構造化ログで取得できる github.com/k1LoW/errors を作った

エラーパッケージを作った話です。

www.m3tech.blog

私は、上記のエントリの「ぼくがかんがえるエラー処理の要件」に完全同意*1で、パフォーマンスをある程度犠牲にしてでもスタックトレースを「カジュアルに」受け取りたいと考えています。

また、

tech.kanmu.co.jp

にもあるように「移行のしやすさ」も欲しいです。

というのも、

methane.hatenablog.jp

にあるように、将来的にGoの標準パッケージにスタックトレースを取得できる機能が登場する可能性があるからです。標準パッケージ最高。

で、

speakerdeck.com

に「独自に実装するのもおすすめ」とあったので、既存のエラーパッケージを参考に独自に実装してみました。

github.com/k1LoW/errors

github.com

特徴としては次のとおりです。

結局、標準パッケージである errors パッケージに追加した機能は

errors.WithStack(err error)スタックトレースを保持して、errors.StackTraces(err error)スタックトレースを取得する

だけです。

それだけのパッケージです。現時点では %+v%#v といったverbにも対応していません*2

シンプルな分、「 github.com/k1LoW/errors の導入」も「 github.com/k1LoW/errors からの移行」も楽だと思っています。

*1:少なくとも現在関わっているプロジェクトにおいては

*2:対応しようとしてみたが errors.Join 対応と併用が難しかったのでやめた