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 ...any) 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