error.go
func Wrap(e interface{}, skip int) *Error {
	if e == nil {
		return nil
	}

	var err error

	switch e := e.(type) {
	case *Error:
		return e
	case error:
		err = e
	default:
		err = fmt.Errorf("%v", e)
	}

	stack := make([]uintptr, MaxStackDepth)
	length := runtime.Callers(2+skip, stack[:])
	return &Error{
		Err:   err,
		stack: stack[:length],
	}
}
func Wrap(e interface{}, skip int) *Error {
	if e == nil {
		return nil
	}

	var err error

	switch e := e.(type) {
	case *Error:
		return e
	case error:
		err = e
	default:
		err = fmt.Errorf("%v", e)
	}

	stack := make([]uintptr, MaxStackDepth)
	length := runtime.Callers(2+skip, stack[:])
	return &Error{
		Err:   err,
		stack: stack[:length],
	}
}
func Wrap ( e interface { } , skip int ) * Error { if e == nil { return nil } var err error switch e := e . ( type ) { case * Error : return e case error : err = e default : err = fmt . Errorf ( " " , e ) } stack := make ( [ ] uintptr , MaxStackDepth ) length := runtime . Callers ( 2 + skip , stack [ : ] ) return & Error { Err : err , stack : stack [ : length ] , } }
// Wrap makes an Error from the given value. If that value is already an
// error then it will be used directly, if not, it will be passed to
// fmt.Errorf("%v"). The skip parameter indicates how far up the stack
// to start the stacktrace. 0 is from the current call, 1 from its caller, etc.
Wrap makes an Error from the given value . If that value is already an error then it will be used directly if not it will be passed to fmt . Errorf ( %v ) . The skip parameter indicates how far up the stack to start the stacktrace . 0 is from the current call 1 from its caller etc .