エラーの分岐にpkg/errorsを使う
modelのロジックが複数の種類のエラーを返す想定で出力を変えたいなーと思っていろいろ調べたのでメモ。
どうやったらシンプルにできるかなーと考えてたんですが、pkg/errorsを使う形に落ち着きました。
だいたい以下のような感じで、独自のエラー用の構造体を作って、pkg/errors
のCauseを使って分岐するだけです。このやり方自体もpkg/errors/errors.go
のコメントにかかれています。
errors/errors.go at master · pkg/errors · GitHub
package main import ( "log" "github.com/pkg/errors" ) type SampleError struct{} func (e *SampleError) Error() string { return "sample error" } func main() { err := &SampleError{} switch errors.Cause(err).(type) { case *SampleError: log.Println("sample") default: log.Println("default") } }
シンプルですが、APIでレスポンスを出し分けたいとかに便利だと思います。