| // Package pretty provides pretty-printing for Go values. This is |
| // useful during debugging, to avoid wrapping long output lines in |
| // the terminal. |
| // |
| // It provides a function, Formatter, that can be used with any |
| // function that accepts a format string. It also provides |
| // convenience wrappers for functions in packages fmt and log. |
| package pretty |
| |
| import ( |
| "fmt" |
| "io" |
| "log" |
| "reflect" |
| ) |
| |
| // Errorf is a convenience wrapper for fmt.Errorf. |
| // |
| // Calling Errorf(f, x, y) is equivalent to |
| // fmt.Errorf(f, Formatter(x), Formatter(y)). |
| func Errorf(format string, a ...interface{}) error { |
| return fmt.Errorf(format, wrap(a, false)...) |
| } |
| |
| // Fprintf is a convenience wrapper for fmt.Fprintf. |
| // |
| // Calling Fprintf(w, f, x, y) is equivalent to |
| // fmt.Fprintf(w, f, Formatter(x), Formatter(y)). |
| func Fprintf(w io.Writer, format string, a ...interface{}) (n int, error error) { |
| return fmt.Fprintf(w, format, wrap(a, false)...) |
| } |
| |
| // Log is a convenience wrapper for log.Printf. |
| // |
| // Calling Log(x, y) is equivalent to |
| // log.Print(Formatter(x), Formatter(y)), but each operand is |
| // formatted with "%# v". |
| func Log(a ...interface{}) { |
| log.Print(wrap(a, true)...) |
| } |
| |
| // Logf is a convenience wrapper for log.Printf. |
| // |
| // Calling Logf(f, x, y) is equivalent to |
| // log.Printf(f, Formatter(x), Formatter(y)). |
| func Logf(format string, a ...interface{}) { |
| log.Printf(format, wrap(a, false)...) |
| } |
| |
| // Logln is a convenience wrapper for log.Printf. |
| // |
| // Calling Logln(x, y) is equivalent to |
| // log.Println(Formatter(x), Formatter(y)), but each operand is |
| // formatted with "%# v". |
| func Logln(a ...interface{}) { |
| log.Println(wrap(a, true)...) |
| } |
| |
| // Print pretty-prints its operands and writes to standard output. |
| // |
| // Calling Print(x, y) is equivalent to |
| // fmt.Print(Formatter(x), Formatter(y)), but each operand is |
| // formatted with "%# v". |
| func Print(a ...interface{}) (n int, errno error) { |
| return fmt.Print(wrap(a, true)...) |
| } |
| |
| // Printf is a convenience wrapper for fmt.Printf. |
| // |
| // Calling Printf(f, x, y) is equivalent to |
| // fmt.Printf(f, Formatter(x), Formatter(y)). |
| func Printf(format string, a ...interface{}) (n int, errno error) { |
| return fmt.Printf(format, wrap(a, false)...) |
| } |
| |
| // Println pretty-prints its operands and writes to standard output. |
| // |
| // Calling Println(x, y) is equivalent to |
| // fmt.Println(Formatter(x), Formatter(y)), but each operand is |
| // formatted with "%# v". |
| func Println(a ...interface{}) (n int, errno error) { |
| return fmt.Println(wrap(a, true)...) |
| } |
| |
| // Sprint is a convenience wrapper for fmt.Sprintf. |
| // |
| // Calling Sprint(x, y) is equivalent to |
| // fmt.Sprint(Formatter(x), Formatter(y)), but each operand is |
| // formatted with "%# v". |
| func Sprint(a ...interface{}) string { |
| return fmt.Sprint(wrap(a, true)...) |
| } |
| |
| // Sprintf is a convenience wrapper for fmt.Sprintf. |
| // |
| // Calling Sprintf(f, x, y) is equivalent to |
| // fmt.Sprintf(f, Formatter(x), Formatter(y)). |
| func Sprintf(format string, a ...interface{}) string { |
| return fmt.Sprintf(format, wrap(a, false)...) |
| } |
| |
| func wrap(a []interface{}, force bool) []interface{} { |
| w := make([]interface{}, len(a)) |
| for i, x := range a { |
| w[i] = formatter{v: reflect.ValueOf(x), force: force} |
| } |
| return w |
| } |