1
0

More than 3 years have passed since last update.

Go エラーハンドリング

Posted at

エラー処理の基本

  • 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

参考

【Golang Errro handling】エラーの種類によって処理を分けるBESTな方法

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0