emahiro/b.log

Drastically Repeat Yourself !!!!

独自エラーを errors.Is でハンドリングするには Unwrap を実装する必要がある

Overview

何度も忘れるので備忘録。
きっとまた忘れて似たようなエントリを書く気もする。

Sample

独自エラーを errors.Is でハンドリングしたいときは以下のように Unwrap を実装する。

type sampleError struct {
    err error
    msg string
}

func (e *sampleError) Error() string {
    return e.msg
}

func (e *sampleError) Unwrap() error {
    return e.err
}

func main() {
    var err error = &sampleError{
        err: context.Canceled,
        msg: "context canceled",
    }

    if errors.Is(err, context.Canceled) {
        fmt.Println(err)
        return
    }
    fmt.Println(err.Error() + "-a")
}

ref: https://go.dev/play/p/h3fipvb69mL