Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.1 KiB
108 lines
3.1 KiB
// 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 Print(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 |
|
}
|
|
|