覚書

Golang: エラーハンドリング

golang go

MustXXX という関数内でエラー処理して終了するのはアンチパターンな気がする `MustXXX` はpanicする時に使うもので、エラーハンドリングのために使うものではないと思っているのだけどいまいち根拠がない。 MustXXX を多様すると、エラーを表示したり終了する処理がコードの中に散在することになる。冗長だし、エラーの表示処理を忘れるかも知れない。都度エラーの有無をチェックする必要はあるが、エラー時のログ出力と終了処理は1カ所に集約する方がよい。

関数の中でエラーチェックして、エラーなら終了(os.Exit)するコードについて

  • 直感的にはアンチパターンに感じる

    • なぜか?
    • os.Exitしているということは副作用が生じているということで、その関数の振る舞いについてテストしにくいのではないか
    • コードの深い箇所でExitした場合、エラー発生箇所をログに出力していたとしてもその関数がどこから呼ばれたのかはログには現れない。下位層のエラーをラップして上位層まで返すことで、より詳細なスタックトレースを取得できる
      • これは間違いだな。下位層で%+vでエラーログを吐いた場合は呼び出し元は見える
  • http://www.golangpatterns.info/error-handling