0
0

More than 1 year has passed since last update.

defer文の中でエラーハンドリングするときにエラーを握りつぶさないようにする

Posted at

このミスを2回やらかしたので備忘録として書いておきます。

やらかしたコード

  • defer文の中で何らかの処理を行いたい。そこでエラーが発生したら、それをもちろんハンドリングしたい。その際に、以下のように書くと元々存在していたエラーを上書きしてしまう。
func hoge() error {
    // 何らかの処理
    
    defer func() {
        err = cleanUp()
    }

    // 何らかの処理
    return err
}

修正例

例えば以下のようにすれば、元の関数で発生したエラーと、defer文内で発生したエラーを両方とも検知できる。

import (
    "go.uber.org/multierr"
)

func hoge() error {
    // 何らかの処理
    
    defer func() {
        err = multierr.Append(err, cleanUp())
    }

    // 何らかの処理
    return err
}
0
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
0
0