golang errors 代码
文件路径:/src/fmt/errors.go
/ 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
/ that does not implement the error interface. The %w verb is otherwise
/ a synonym for %v.
func Errorf(format string, a ...any) 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
}