errors

About

Go標準のエラーパッケージ。

Examples:

func do() error {
    :
    if !check() {
        return errors.New("Something is wrong!")
    }
    :
    return nil
}

関連項目:

Info:

  • Go 1.13で .Is, .As, .Unwrap が加わり、それまでgithub.com/pkg/errorsじゃないとできなかったようなことができるようになった。

参考:

func As

https://golang.org/pkg/errors/#As

func As(err error, target interface{}) bool

Example:

// errがos.PathError型の値をラップしているときに真
var perr *os.PathError
if errors.As(err, &perr) {
	fmt.Println(perr.Path)
}

func Is

func Is(err, target error) bool

Example:

// errがos.ErrExistをラップしているときに真
if errors.Is(err, os.ErrExist)

func Unwrap

func Unwrap(err error) error

内包するエラーを返す。

Example:

type myerr struct {
	msg string
	err error
}

func (e *myerr) Error() string {
	return fmt.Sprintf("%s << %s", e.msg, e.err.Error())
}

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

//err := fmt.Errorf("Error occured! %w\n", errors.New("I am guilty!"))
err := &myerr{msg: "Error occured!", err: errors.New("I am guilty!")}
fmt.Printf("Error: %v\n", err)

https://play.golang.org/p/kAFNUR_XHl5

実行結果:

Error: Error occured! << I am guilty!