| package fmt | |
| import ( | |
| "errors" | |
| "strings" | |
| ) | |
| func Sprint(args ...interface{}) string | |
| func Sprintln(args ...interface{}) string { | |
| return Sprint(args...) + "\n" | |
| } | |
| func Print(args ...interface{}) (int, error) { | |
| var n int | |
| for i, arg := range args { | |
| if i > 0 { | |
| print(" ") | |
| n++ | |
| } | |
| msg := Sprint(arg) | |
| n += len(msg) | |
| print(msg) | |
| } | |
| return n, nil | |
| } | |
| func Println(args ...interface{}) { | |
| Print(args...) | |
| println() | |
| } | |
| // formatting is too complex to fake | |
| // handle the bare minimum needed for tests | |
| func Printf(format string, args ...interface{}) (int, error) { | |
| msg := Sprintf(format, args...) | |
| print(msg) | |
| return len(msg), nil | |
| } | |
| func Sprintf(format string, args ...interface{}) string { | |
| // handle extremely simple cases that appear in tests. | |
| if len(format) == 0 { | |
| return "" | |
| } | |
| switch { | |
| case strings.HasPrefix("%v", format) || strings.HasPrefix("%s", format): | |
| return Sprint(args[0]) + Sprintf(format[2:], args[1:]...) | |
| case !strings.HasPrefix("%", format): | |
| return format[:1] + Sprintf(format[1:], args...) | |
| default: | |
| panic("unsupported format string for testing Sprintf") | |
| } | |
| } | |
| func Errorf(format string, args ...interface{}) error { | |
| msg := Sprintf(format, args...) | |
| return errors.New(msg) | |
| } |