pkg/errorsについて
pkg/errors
は、エラーハンドリングを強化するために使うパッケージです。今回はこれを使います。
Go1.13からは標準の errors
パッケージというのが標準パッケージに追加されたのですが、errors
は未だにいろんなところで見かけるので、今回は pkg/errors
を使います。
移行についても紹介します。
go getする
go get github.com/pkg/errors
errors.Wrapを使ってエラーに情報を追加する
errors.Wrap
は、エラーに情報を追加するための関数です。
以下のようにerrにエラーが入っているときに、errors.Wrap
を使うとエラーに情報を追加することができます。
以下のように関数がエラーを返すときにWrapで情報を追加してあげることができます。
package main
import (
"fmt"
"io/ioutil"
"github.com/pkg/errors"
)
func main() {
err := someTimesError()
if err != nil {
fmt.Println(err)
return
}
}
func someTimesError() error {
if err != nil {
return nil, errors.Wrap(err, "someTimesError") // ここでエラーに情報を追加
}
return
}
errorsへの移行について
fmt.Errorf
を使用することでWrapと同じようにエラーに情報を追加することができます。
Errorf
自体はエラーを作成する関数ですが、%w
を使うことで、エラー文の中に現在のエラーを埋め込むことができるので、これを使うことでWrapと同じようにエラーに情報を追加することができます。
fmt.Errorf("message %w", err)