...

Source file src/fmt/errors.go

     1	// Copyright 2018 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	package fmt
     6	
     7	import "errors"
     8	
     9	// Errorf formats according to a format specifier and returns the string as a
    10	// value that satisfies error.
    11	//
    12	// If the format specifier includes a %w verb with an error operand,
    13	// the returned error will implement an Unwrap method returning the operand. It is
    14	// invalid to include more than one %w verb or to supply it with an operand
    15	// that does not implement the error interface. The %w verb is otherwise
    16	// a synonym for %v.
    17	func Errorf(format string, a ...interface{}) error {
    18		p := newPrinter()
    19		p.wrapErrs = true
    20		p.doPrintf(format, a)
    21		s := string(p.buf)
    22		var err error
    23		if p.wrappedErr == nil {
    24			err = errors.New(s)
    25		} else {
    26			err = &wrapError{s, p.wrappedErr}
    27		}
    28		p.free()
    29		return err
    30	}
    31	
    32	type wrapError struct {
    33		msg string
    34		err error
    35	}
    36	
    37	func (e *wrapError) Error() string {
    38		return e.msg
    39	}
    40	
    41	func (e *wrapError) Unwrap() error {
    42		return e.err
    43	}
    44	

View as plain text