Goのエラーハンドリング 最新事情Lunch LT に参加した

2024-04-24  /  勉強会GoProgramming

Goは今まで触っていましたが、あまり最近のアップデートをきちんと把握できていません。今回はエラーハンドリングについての知見をブラッシュアップしようと思い、こちらの勉強会に参加しました。

Goの格言”error is value”の本質を読み解く

資料: Goの格言”Errors are values”の本質を読み解く - Speaker Deck

エラーを構造体のフィールドとして持つことで活用ができるという話でした。エラーを後から処理したいということがあるので、たまに使っていたことがありましたが、複数のエラーを扱いたい場合にはどうしたら良いのか、改めて確認してみようと思いました。

冗長なエラーログを削減しつつ、スタックトレースを手に入れる

資料: 冗長なエラーログを削減し、スタックトレースを手に入れる - Slidev

エラーが発生した場合に、いくつかのネストした関数の呼び出し経路は知りたいので、スタックトレースは確かに欲しいです。ですが、常に欲しいわけでもないし、ログが増えると検索とかのコストがかかってしまうというのは自分も実感していました。

morikuni/failure が便利そうなので試してみたいと思いました。

failureでお手軽エラーハンドリング

資料: failureでお手軽エラーハンドリング - Google スライド

一つ前の発表で使ってみたいと思っていたら morikuni/failure の作者の発表でした。試す前に話が聞けて良かったです。

ErrorCodeをあらかじめ設計する必要があり、アプリケーションの中でどういったエラーを取り扱っているのかを考える時間を作る必要が出てきます。それによって雑にエラーを作ってしまって、結局役に立たないということを避けることができそうだなと思いました。

単純に既存のエラーをラップするという使い方もできるようなので、導入も簡単にできそうで良さそうですね。

Goのmultiple errorsの最新事情

資料: Goのmultiple errorsについて (2024年4月版) - Speaker Deck

Go 1.20 から使える機能の紹介でした。ループしながら処理した時にエラーが発生するような、複数のエラーを取り扱う方法で悩んでいたので、試してみようと思いました。

Goのエラースタックトレースの歴史と今後

資料: Goのエラースタックトレースの歴史と今後 - Speaker Deck

参加したきっかけではありますが、ここ数年Goのエラー周りについて不勉強だったので、その歴史と現状を知ることができて良かったです。 pkg/errors を利用している箇所がまだ残っていて、アーカイブされているとは知らなかったので移行を検討しようと思いました。

まとめ

どちらの発表もとても勉強になりました。発表者の方々、ありがとうございました。色々試してみて、本番投入できたらと思います。