Santiago Corredoira Lascaray 9 anni fa
parent
commit
7a0abd8f63
3 ha cambiato i file con 37 aggiunte e 0 eliminazioni
  1. 13 0
      errors.go
  2. 17 0
      errors_test.go
  3. 7 0
      example_test.go

+ 13 - 0
errors.go

@@ -130,6 +130,19 @@ func (c cause) Error() string   { return c.Message() + ": " + c.Cause().Error()
 func (c cause) Cause() error    { return c.cause }
 func (c cause) Message() string { return c.message }
 
+// Errorf formats according to a format specifier and returns the string
+// as a value that satisfies error.
+func Errorf(format string, args ...interface{}) error {
+	pc, _, _, _ := runtime.Caller(1)
+	return struct {
+		error
+		location
+	}{
+		fmt.Errorf(format, args...),
+		location(pc),
+	}
+}
+
 // Wrap returns an error annotating the cause with message.
 // If cause is nil, Wrap returns nil.
 func Wrap(cause error, message string) error {

+ 17 - 0
errors_test.go

@@ -170,3 +170,20 @@ func TestWrapf(t *testing.T) {
 		}
 	}
 }
+
+func TestErrorf(t *testing.T) {
+	tests := []struct {
+		err  error
+		want string
+	}{
+		{Errorf("read error without format specifiers"), "read error without format specifiers"},
+		{Errorf("read error with %d format specifier", 1), "read error with 1 format specifier"},
+	}
+
+	for _, tt := range tests {
+		got := tt.err.Error()
+		if got != tt.want {
+			t.Errorf("Errorf(%v): got: %q, want %q", tt.err, got, tt.want)
+		}
+	}
+}

+ 7 - 0
example_test.go

@@ -62,3 +62,10 @@ func ExampleWrapf() {
 
 	// Output: oh noes #2: whoops
 }
+
+func ExampleErrorf() {
+	err := errors.Errorf("whoops: %s", "foo")
+	errors.Fprint(os.Stdout, err)
+
+	// Output: github.com/pkg/errors/example_test.go:67: whoops: foo
+}