Source File
wrap.go
Belonging Package
github.com/go-faster/errors
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package errors
import (
)
// A Wrapper provides context around another error.
type Wrapper interface {
// Unwrap returns the next error in the error chain.
// If there is no next error, Unwrap returns nil.
Unwrap() error
}
// Opaque returns an error with the same error formatting as err
// but that does not match err and cannot be unwrapped.
func ( error) error {
return noWrapper{}
}
type noWrapper struct {
error
}
func ( noWrapper) ( Printer) ( error) {
if , := .error.(Formatter); {
return .FormatError()
}
.Print(.error)
return nil
}
// Unwrap returns the result of calling the Unwrap method on err, if err's
// type contains an Unwrap method returning error.
// Otherwise, Unwrap returns nil.
func ( error) error {
return errors.Unwrap()
}
// Cause returns first recorded Frame.
func ( error) ( Frame, bool) {
for {
, := .(*wrapError)
if ! {
return ,
}
= .frame
= ||
= .err
}
}
type wrapError struct {
msg string
err error
frame Frame
}
func ( *wrapError) () string {
return fmt.Sprint()
}
func ( *wrapError) ( fmt.State, rune) { FormatError(, , ) }
func ( *wrapError) ( Printer) ( error) {
.Print(.msg)
.frame.Format()
return .err
}
func ( *wrapError) () error {
return .err
}
// Wrap error with message and caller.
func ( error, string) error {
:= Frame{}
if Trace() {
= Caller(1)
}
return &wrapError{msg: , err: , frame: }
}
// Wrapf wraps error with formatted message and caller.
func ( error, string, ...interface{}) error {
:= Frame{}
if Trace() {
= Caller(1)
}
:= fmt.Sprintf(, ...)
return &wrapError{msg: , err: , frame: }
}
// Is reports whether any error in err's chain matches target.
//
// The chain consists of err itself followed by the sequence of errors obtained by
// repeatedly calling Unwrap.
//
// An error is considered to match a target if it is equal to that target or if
// it implements a method Is(error) bool such that Is(target) returns true.
//
// An error type might provide an Is method so it can be treated as equivalent
// to an existing error. For example, if MyError defines
//
// func (m MyError) Is(target error) bool { return target == fs.ErrExist }
//
// then Is(MyError{}, fs.ErrExist) returns true. See syscall.Errno.Is for
// an example in the standard library.
func (, error) bool {
return errors.Is(, )
}
// As finds the first error in err's chain that matches target, and if so, sets
// target to that error value and returns true. Otherwise, it returns false.
//
// The chain consists of err itself followed by the sequence of errors obtained by
// repeatedly calling Unwrap.
//
// An error matches target if the error's concrete value is assignable to the value
// pointed to by target, or if the error has a method As(interface{}) bool such that
// As(target) returns true. In the latter case, the As method is responsible for
// setting target.
//
// An error type might provide an As method so it can be treated as if it were a
// different error type.
//
// As panics if target is not a non-nil pointer to either a type that implements
// error, or to any interface type.
func ( error, interface{}) bool { return errors.As(, ) }
The pages are generated with Golds v0.6.7. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |