errors

package module
v2.3.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 28, 2023 License: MIT Imports: 7 Imported by: 4

README

go-errors

powerful errors library with a simple API that allows:

  • accessing all the standard library errors functions
  • wrapping of errors
  • adding values to errors, in a similar manner to contexts
  • including calling function prefix when tag=errcaller is set
  • including stacktrace with error when tag=errtrace is set

Documentation

Index

Constants

View Source
const IncludesCaller = false

IncludesCaller is a compile-time flag used to indicate whether to include calling function prefix on error wrap / creation.

View Source
const IncludesStacktrace = false

IncludesStacktrace is a compile-time flag used to indicate whether to include stacktraces on error wrap / creation.

Variables

This section is empty.

Functions

func As

func As(err error, target any) bool

As finds the first error in err's tree that matches target, and if one is found, sets target to that error value and returns true. Otherwise, it returns false.

The tree consists of err itself, followed by the errors obtained by repeatedly calling Unwrap. When err wraps multiple errors, As examines err followed by a depth-first traversal of its children.

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 AsV2 added in v2.3.1

func AsV2[Type any](err error) Type

AsV2 is functionally similar to As(), instead leveraging generics to handle allocation and returning of a concrete generic parameter type.

func Is

func Is(err error, target error) bool

Is reports whether any error in err's tree matches target.

The tree consists of err itself, followed by the errors obtained by repeatedly calling Unwrap. When err wraps multiple errors, Is examines err followed by a depth-first traversal of its children.

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. An Is method should only shallowly compare err and the target and not call Unwrap on either.

func IsV2 added in v2.3.1

func IsV2(err error, targets ...error) bool

IsV2 calls Is(err, target) for each target within targets.

func Join added in v2.3.0

func Join(errs ...error) error

Join returns an error that wraps the given errors. Any nil error values are discarded. Join returns nil if every value in errs is nil. The error formats as the concatenation of the strings obtained by calling the Error method of each element of errs, with a newline between each string.

A non-nil error returned by Join implements the Unwrap() []error method.

func New

func New(msg string) error

New returns a new error created from message.

Note this function cannot be inlined, to ensure expected and consistent behaviour in setting trace / caller info.

func NewAt added in v2.3.0

func NewAt(skip int, msg string) error

NewAt returns a new error created, skipping 'skip' frames for trace / caller information, from message.

Note this function cannot be inlined, to ensure expected and consistent behaviour in setting trace / caller info.

func Newf

func Newf(msgf string, args ...interface{}) error

Newf returns a new error created from message format and args.

Note this function cannot be inlined, to ensure expected and consistent behaviour in setting trace / caller info.

func Unwrap

func Unwrap(err error) error

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.

Unwrap only calls a method of the form "Unwrap() error". In particular Unwrap does not unwrap errors returned by Join.

func UnwrapV2 added in v2.3.1

func UnwrapV2(err error) []error

UnwrapV2 is functionally similar to Unwrap(), except that it also handles the case of interface{ Unwrap() []error }.

func Value added in v2.1.0

func Value(err error, key any) any

Value searches for value stored under given key in error chain.

func WithValue added in v2.1.0

func WithValue(err error, key any, value any) error

WithValue wraps err to store given key-value pair, accessible via Value() function.

func Wrap

func Wrap(err error, msg string) error

Wrap will wrap supplied error within a new error created from message.

Note this function cannot be inlined, to ensure expected and consistent behaviour in setting trace / caller info.

func WrapAt added in v2.3.0

func WrapAt(skip int, err error, msg string) error

WrapAt wraps error within new error created from message, skipping 'skip' frames for trace / caller information.

Note this function cannot be inlined, to ensure expected and consistent behaviour in setting trace / caller info.

func Wrapf

func Wrapf(err error, msgf string, args ...interface{}) error

Wrapf will wrap supplied error within a new error created from message format and args.

Note this function cannot be inlined, to ensure expected and consistent behaviour in setting trace / caller info.

Types

type Callers

type Callers []runtime.Frame

Callers ...

func Stacktrace

func Stacktrace(err error) Callers

Stacktrace fetches first stored stacktrace of callers from error chain.

func (Callers) MarshalJSON

func (c Callers) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler to provide an easy, simple default.

func (Callers) String

func (c Callers) String() string

String will return a simple string representation of receiving Callers slice.

type OnceError

type OnceError struct {
	// contains filtered or unexported fields
}

OnceError is an error structure that supports safe multi threaded usage and setting only once (until reset).

func (*OnceError) IsSet

func (e *OnceError) IsSet() bool

IsSet returns whether OnceError has been set.

func (*OnceError) Load

func (e *OnceError) Load() error

Load will load the currently stored error.

func (*OnceError) Reset

func (e *OnceError) Reset()

Reset will reset the OnceError value.

func (*OnceError) Store

func (e *OnceError) Store(err error) bool

Store will safely set the OnceError to value, no-op if nil.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL