2019-09-06 20:12:46 +02:00
|
|
|
// 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 fmt
|
|
|
|
|
|
|
|
import "errors"
|
|
|
|
|
|
|
|
// Errorf formats according to a format specifier and returns the string as a
|
|
|
|
// value that satisfies error.
|
|
|
|
//
|
|
|
|
// If the format specifier includes a %w verb with an error operand,
|
|
|
|
// the returned error will implement an Unwrap method returning the operand. It is
|
|
|
|
// invalid to include more than one %w verb or to supply it with an operand
|
2019-09-13 01:22:53 +02:00
|
|
|
// that does not implement the error interface. The %w verb is otherwise
|
2019-09-06 20:12:46 +02:00
|
|
|
// a synonym for %v.
|
|
|
|
func Errorf(format string, a ...interface{}) error {
|
|
|
|
p := newPrinter()
|
|
|
|
p.wrapErrs = true
|
|
|
|
p.doPrintf(format, a)
|
|
|
|
s := string(p.buf)
|
|
|
|
var err error
|
|
|
|
if p.wrappedErr == nil {
|
|
|
|
err = errors.New(s)
|
|
|
|
} else {
|
|
|
|
err = &wrapError{s, p.wrappedErr}
|
|
|
|
}
|
|
|
|
p.free()
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
type wrapError struct {
|
|
|
|
msg string
|
|
|
|
err error
|
|
|
|
}
|
|
|
|
|
|
|
|
func (e *wrapError) Error() string {
|
|
|
|
return e.msg
|
|
|
|
}
|
|
|
|
|
|
|
|
func (e *wrapError) Unwrap() error {
|
|
|
|
return e.err
|
|
|
|
}
|