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!