Go で API サーバを作る場合のエラーハンドリングについて勉強する
Go のエラーハンドリングの中でも API サーバの場合について勉強したメモ。
Go は今現在の標準エラーパッケージでは StackTrace を出せなかったりして他にも考えることがあるのですが、とりあえず API サーバの場合にエラーを中央集権的に取り扱うには……ということを勉強したいと思う。
ググったらいきなりいい感じの記事が見つかった。
APIサーバのおけるGoのエラーハンドリングについて考えてみる
まずビジネスロジックを担う関数はエラーを返すようにして、ハンドラと分離することで、エラーハンドリングとビジネスロジックを切り離してみる。
下記が元実装。
|
|
これを下記のように分離した。
|
|
試しに input 内で標準エラーパッケージで errors.New("test)
として inputHandler に返したとき、ログには
2021/10/09 14:41:03 test
と出る状態となった。
ここから更にエラーをラップするということをしてみる。
参考記事を元に独自エラーを定義してみた。
なお参考記事を丸写しすると Error 関数でスタックオーバーフローが発生するので注意。
|
|
すごく冗長に見えるので今後何とかしたい。(最終的にスタックトレースを出したいのでたぶん既存のパッケージに乗り換えると思う)
これを使って元の input 関数を書き換えた。
|
|
エラーハンドリング元は、今回はあらゆるケースで 500 エラーしか出さないので特に変更なし。
これでエラーを書き出すと
2021/10/09 15:32:46 Firestore IO Error: test
のようになり、エラーの種類が書き出せるようになった。
次回、スタックトレースを出したりする予定。
以上