エラー処理の基本
- Goにはtry〜catch〜finallyの例外処理は存在しない
http://golang.jp/go_faq#exceptions - エラーを処理するためにerrorインターフェースが用意されている
main.go
type error interface {
Error() string
}
実際には、返されたエラーがnilかどうかで条件分岐し、nilではない場合error.Error()でエラー内容を出力しるような使い方をする
errro packageのよく使う4つの機能
1.func New(message string)erro
エラーメッセージを文字列で指定して単純にエラーを生成する時に使う
main.go
err := errors.New("エラー")
fmt.Println("output:", err)
// output:エラー
2.func Errorft(format string, args ...interface{})error
フォーマット形式とエラーメッセージ文字列を指定してエラーを生成
main.go
err := errors.Errorf("output: %s", "エラー")
fmt.Printkn("%+v", err)
// output: エラー
3.func Wrap(err error, message string)error
エラーをラップする時に使う
main.go
err := errors.New("repository err")
err = errors.Wrap(err, "service err")
err = errors.Wrap(err, "usecase err")
fmt.Pringln(err)
// usecase err: service err: repository err
4.func Cause(err error)error
一番最初に起きたエラーの原因を特定する際に有効
main.go
err := errors.New("repository err")
err = errors.Wrap(err, "service err")
err = errors.Wrap(err, "usecase err")
fmt.Pringln(errors.Cause(err))
// repository err