| // Copyright 2009 The Go Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style | 
 | // license that can be found in the LICENSE file. | 
 |  | 
 | /* | 
 | 	Package fmt implements formatted I/O with functions analogous | 
 | 	to C's printf and scanf.  The format 'verbs' are derived from C's but | 
 | 	are simpler. | 
 |  | 
 |  | 
 | 	Printing | 
 |  | 
 | 	The verbs: | 
 |  | 
 | 	General: | 
 | 		%v	the value in a default format | 
 | 			when printing structs, the plus flag (%+v) adds field names | 
 | 		%#v	a Go-syntax representation of the value | 
 | 		%T	a Go-syntax representation of the type of the value | 
 | 		%%	a literal percent sign; consumes no value | 
 |  | 
 | 	Boolean: | 
 | 		%t	the word true or false | 
 | 	Integer: | 
 | 		%b	base 2 | 
 | 		%c	the character represented by the corresponding Unicode code point | 
 | 		%d	base 10 | 
 | 		%o	base 8 | 
 | 		%q	a single-quoted character literal safely escaped with Go syntax. | 
 | 		%x	base 16, with lower-case letters for a-f | 
 | 		%X	base 16, with upper-case letters for A-F | 
 | 		%U	Unicode format: U+1234; same as "U+%04X" | 
 | 	Floating-point and complex constituents: | 
 | 		%b	decimalless scientific notation with exponent a power of two, | 
 | 			in the manner of strconv.FormatFloat with the 'b' format, | 
 | 			e.g. -123456p-78 | 
 | 		%e	scientific notation, e.g. -1.234456e+78 | 
 | 		%E	scientific notation, e.g. -1.234456E+78 | 
 | 		%f	decimal point but no exponent, e.g. 123.456 | 
 | 		%F	synonym for %f | 
 | 		%g	%e for large exponents, %f otherwise. Precision is discussed below. | 
 | 		%G	%E for large exponents, %F otherwise | 
 | 	String and slice of bytes (treated equivalently with these verbs): | 
 | 		%s	the uninterpreted bytes of the string or slice | 
 | 		%q	a double-quoted string safely escaped with Go syntax | 
 | 		%x	base 16, lower-case, two characters per byte | 
 | 		%X	base 16, upper-case, two characters per byte | 
 | 	Slice: | 
 | 		%p	address of 0th element in base 16 notation, with leading 0x | 
 | 	Pointer: | 
 | 		%p	base 16 notation, with leading 0x | 
 | 		The %b, %d, %o, %x and %X verbs also work with pointers, | 
 | 		formatting the value exactly as if it were an integer. | 
 |  | 
 | 	The default format for %v is: | 
 | 		bool:                    %t | 
 | 		int, int8 etc.:          %d | 
 | 		uint, uint8 etc.:        %d, %#x if printed with %#v | 
 | 		float32, complex64, etc: %g | 
 | 		string:                  %s | 
 | 		chan:                    %p | 
 | 		pointer:                 %p | 
 | 	For compound objects, the elements are printed using these rules, recursively, | 
 | 	laid out like this: | 
 | 		struct:             {field0 field1 ...} | 
 | 		array, slice:       [elem0 elem1 ...] | 
 | 		maps:               map[key1:value1 key2:value2 ...] | 
 | 		pointer to above:   &{}, &[], &map[] | 
 |  | 
 | 	Width is specified by an optional decimal number immediately preceding the verb. | 
 | 	If absent, the width is whatever is necessary to represent the value. | 
 | 	Precision is specified after the (optional) width by a period followed by a | 
 | 	decimal number. If no period is present, a default precision is used. | 
 | 	A period with no following number specifies a precision of zero. | 
 | 	Examples: | 
 | 		%f     default width, default precision | 
 | 		%9f    width 9, default precision | 
 | 		%.2f   default width, precision 2 | 
 | 		%9.2f  width 9, precision 2 | 
 | 		%9.f   width 9, precision 0 | 
 |  | 
 | 	Width and precision are measured in units of Unicode code points, | 
 | 	that is, runes. (This differs from C's printf where the | 
 | 	units are always measured in bytes.) Either or both of the flags | 
 | 	may be replaced with the character '*', causing their values to be | 
 | 	obtained from the next operand (preceding the one to format), | 
 | 	which must be of type int. | 
 |  | 
 | 	For most values, width is the minimum number of runes to output, | 
 | 	padding the formatted form with spaces if necessary. | 
 |  | 
 | 	For strings, byte slices and byte arrays, however, precision | 
 | 	limits the length of the input to be formatted (not the size of | 
 | 	the output), truncating if necessary. Normally it is measured in | 
 | 	runes, but for these types when formatted with the %x or %X format | 
 | 	it is measured in bytes. | 
 |  | 
 | 	For floating-point values, width sets the minimum width of the field and | 
 | 	precision sets the number of places after the decimal, if appropriate, | 
 | 	except that for %g/%G precision sets the maximum number of significant | 
 | 	digits (trailing zeros are removed). For example, given 12.345 the format | 
 | 	%6.3f prints 12.345 while %.3g prints 12.3. The default precision for %e, %f | 
 | 	and %#g is 6; for %g it is the smallest number of digits necessary to identify | 
 | 	the value uniquely. | 
 |  | 
 | 	For complex numbers, the width and precision apply to the two | 
 | 	components independently and the result is parenthesized, so %f applied | 
 | 	to 1.2+3.4i produces (1.200000+3.400000i). | 
 |  | 
 | 	Other flags: | 
 | 		+	always print a sign for numeric values; | 
 | 			guarantee ASCII-only output for %q (%+q) | 
 | 		-	pad with spaces on the right rather than the left (left-justify the field) | 
 | 		#	alternate format: add leading 0 for octal (%#o), 0x for hex (%#x); | 
 | 			0X for hex (%#X); suppress 0x for %p (%#p); | 
 | 			for %q, print a raw (backquoted) string if strconv.CanBackquote | 
 | 			returns true; | 
 | 			always print a decimal point for %e, %E, %f, %F, %g and %G; | 
 | 			do not remove trailing zeros for %g and %G; | 
 | 			write e.g. U+0078 'x' if the character is printable for %U (%#U). | 
 | 		' '	(space) leave a space for elided sign in numbers (% d); | 
 | 			put spaces between bytes printing strings or slices in hex (% x, % X) | 
 | 		0	pad with leading zeros rather than spaces; | 
 | 			for numbers, this moves the padding after the sign | 
 |  | 
 | 	Flags are ignored by verbs that do not expect them. | 
 | 	For example there is no alternate decimal format, so %#d and %d | 
 | 	behave identically. | 
 |  | 
 | 	For each Printf-like function, there is also a Print function | 
 | 	that takes no format and is equivalent to saying %v for every | 
 | 	operand.  Another variant Println inserts blanks between | 
 | 	operands and appends a newline. | 
 |  | 
 | 	Regardless of the verb, if an operand is an interface value, | 
 | 	the internal concrete value is used, not the interface itself. | 
 | 	Thus: | 
 | 		var i interface{} = 23 | 
 | 		fmt.Printf("%v\n", i) | 
 | 	will print 23. | 
 |  | 
 | 	Except when printed using the verbs %T and %p, special | 
 | 	formatting considerations apply for operands that implement | 
 | 	certain interfaces. In order of application: | 
 |  | 
 | 	1. If the operand is a reflect.Value, the operand is replaced by the | 
 | 	concrete value that it holds, and printing continues with the next rule. | 
 |  | 
 | 	2. If an operand implements the Formatter interface, it will | 
 | 	be invoked. Formatter provides fine control of formatting. | 
 |  | 
 | 	3. If the %v verb is used with the # flag (%#v) and the operand | 
 | 	implements the GoStringer interface, that will be invoked. | 
 |  | 
 | 	If the format (which is implicitly %v for Println etc.) is valid | 
 | 	for a string (%s %q %v %x %X), the following two rules apply: | 
 |  | 
 | 	4. If an operand implements the error interface, the Error method | 
 | 	will be invoked to convert the object to a string, which will then | 
 | 	be formatted as required by the verb (if any). | 
 |  | 
 | 	5. If an operand implements method String() string, that method | 
 | 	will be invoked to convert the object to a string, which will then | 
 | 	be formatted as required by the verb (if any). | 
 |  | 
 | 	For compound operands such as slices and structs, the format | 
 | 	applies to the elements of each operand, recursively, not to the | 
 | 	operand as a whole. Thus %q will quote each element of a slice | 
 | 	of strings, and %6.2f will control formatting for each element | 
 | 	of a floating-point array. | 
 |  | 
 | 	However, when printing a byte slice with a string-like verb | 
 | 	(%s %q %x %X), it is treated identically to a string, as a single item. | 
 |  | 
 | 	To avoid recursion in cases such as | 
 | 		type X string | 
 | 		func (x X) String() string { return Sprintf("<%s>", x) } | 
 | 	convert the value before recurring: | 
 | 		func (x X) String() string { return Sprintf("<%s>", string(x)) } | 
 | 	Infinite recursion can also be triggered by self-referential data | 
 | 	structures, such as a slice that contains itself as an element, if | 
 | 	that type has a String method. Such pathologies are rare, however, | 
 | 	and the package does not protect against them. | 
 |  | 
 | 	When printing a struct, fmt cannot and therefore does not invoke | 
 | 	formatting methods such as Error or String on unexported fields. | 
 |  | 
 | 	Explicit argument indexes: | 
 |  | 
 | 	In Printf, Sprintf, and Fprintf, the default behavior is for each | 
 | 	formatting verb to format successive arguments passed in the call. | 
 | 	However, the notation [n] immediately before the verb indicates that the | 
 | 	nth one-indexed argument is to be formatted instead. The same notation | 
 | 	before a '*' for a width or precision selects the argument index holding | 
 | 	the value. After processing a bracketed expression [n], subsequent verbs | 
 | 	will use arguments n+1, n+2, etc. unless otherwise directed. | 
 |  | 
 | 	For example, | 
 | 		fmt.Sprintf("%[2]d %[1]d\n", 11, 22) | 
 | 	will yield "22 11", while | 
 | 		fmt.Sprintf("%[3]*.[2]*[1]f", 12.0, 2, 6) | 
 | 	equivalent to | 
 | 		fmt.Sprintf("%6.2f", 12.0) | 
 | 	will yield " 12.00". Because an explicit index affects subsequent verbs, | 
 | 	this notation can be used to print the same values multiple times | 
 | 	by resetting the index for the first argument to be repeated: | 
 | 		fmt.Sprintf("%d %d %#[1]x %#x", 16, 17) | 
 | 	will yield "16 17 0x10 0x11". | 
 |  | 
 | 	Format errors: | 
 |  | 
 | 	If an invalid argument is given for a verb, such as providing | 
 | 	a string to %d, the generated string will contain a | 
 | 	description of the problem, as in these examples: | 
 |  | 
 | 		Wrong type or unknown verb: %!verb(type=value) | 
 | 			Printf("%d", hi):          %!d(string=hi) | 
 | 		Too many arguments: %!(EXTRA type=value) | 
 | 			Printf("hi", "guys"):      hi%!(EXTRA string=guys) | 
 | 		Too few arguments: %!verb(MISSING) | 
 | 			Printf("hi%d"):            hi%!d(MISSING) | 
 | 		Non-int for width or precision: %!(BADWIDTH) or %!(BADPREC) | 
 | 			Printf("%*s", 4.5, "hi"):  %!(BADWIDTH)hi | 
 | 			Printf("%.*s", 4.5, "hi"): %!(BADPREC)hi | 
 | 		Invalid or invalid use of argument index: %!(BADINDEX) | 
 | 			Printf("%*[2]d", 7):       %!d(BADINDEX) | 
 | 			Printf("%.[2]d", 7):       %!d(BADINDEX) | 
 |  | 
 | 	All errors begin with the string "%!" followed sometimes | 
 | 	by a single character (the verb) and end with a parenthesized | 
 | 	description. | 
 |  | 
 | 	If an Error or String method triggers a panic when called by a | 
 | 	print routine, the fmt package reformats the error message | 
 | 	from the panic, decorating it with an indication that it came | 
 | 	through the fmt package.  For example, if a String method | 
 | 	calls panic("bad"), the resulting formatted message will look | 
 | 	like | 
 | 		%!s(PANIC=bad) | 
 |  | 
 | 	The %!s just shows the print verb in use when the failure | 
 | 	occurred. If the panic is caused by a nil receiver to an Error | 
 | 	or String method, however, the output is the undecorated | 
 | 	string, "<nil>". | 
 |  | 
 | 	Scanning | 
 |  | 
 | 	An analogous set of functions scans formatted text to yield | 
 | 	values.  Scan, Scanf and Scanln read from os.Stdin; Fscan, | 
 | 	Fscanf and Fscanln read from a specified io.Reader; Sscan, | 
 | 	Sscanf and Sscanln read from an argument string. | 
 |  | 
 | 	Scan, Fscan, Sscan treat newlines in the input as spaces. | 
 |  | 
 | 	Scanln, Fscanln and Sscanln stop scanning at a newline and | 
 | 	require that the items be followed by a newline or EOF. | 
 |  | 
 | 	Scanf, Fscanf, and Sscanf parse the arguments according to a | 
 | 	format string, analogous to that of Printf. In the text that | 
 | 	follows, 'space' means any Unicode whitespace character | 
 | 	except newline. | 
 |  | 
 | 	In the format string, a verb introduced by the % character | 
 | 	consumes and parses input; these verbs are described in more | 
 | 	detail below. A character other than %, space, or newline in | 
 | 	the format consumes exactly that input character, which must | 
 | 	be present. A newline with zero or more spaces before it in | 
 | 	the format string consumes zero or more spaces in the input | 
 | 	followed by a single newline or the end of the input. A space | 
 | 	following a newline in the format string consumes zero or more | 
 | 	spaces in the input. Otherwise, any run of one or more spaces | 
 | 	in the format string consumes as many spaces as possible in | 
 | 	the input. Unless the run of spaces in the format string | 
 | 	appears adjacent to a newline, the run must consume at least | 
 | 	one space from the input or find the end of the input. | 
 |  | 
 | 	The handling of spaces and newlines differs from that of C's | 
 | 	scanf family: in C, newlines are treated as any other space, | 
 | 	and it is never an error when a run of spaces in the format | 
 | 	string finds no spaces to consume in the input. | 
 |  | 
 | 	The verbs behave analogously to those of Printf. | 
 | 	For example, %x will scan an integer as a hexadecimal number, | 
 | 	and %v will scan the default representation format for the value. | 
 | 	The Printf verbs %p and %T and the flags # and + are not implemented. | 
 | 	The verbs %e %E %f %F %g and %G are all equivalent and scan any | 
 | 	floating-point or complex value. For float and complex literals in | 
 | 	scientific notation, both the decimal (e) and binary (p) exponent | 
 | 	formats are supported (for example: "2.3e+7" and "4.5p-8"). | 
 |  | 
 | 	Input processed by verbs is implicitly space-delimited: the | 
 | 	implementation of every verb except %c starts by discarding | 
 | 	leading spaces from the remaining input, and the %s verb | 
 | 	(and %v reading into a string) stops consuming input at the first | 
 | 	space or newline character. | 
 |  | 
 | 	The familiar base-setting prefixes 0 (octal) and 0x | 
 | 	(hexadecimal) are accepted when scanning integers without | 
 | 	a format or with the %v verb. | 
 |  | 
 | 	Width is interpreted in the input text but there is no | 
 | 	syntax for scanning with a precision (no %5.2f, just %5f). | 
 | 	If width is provided, it applies after leading spaces are | 
 | 	trimmed and specifies the maximum number of runes to read | 
 | 	to satisfy the verb. For example, | 
 | 	   Sscanf(" 1234567 ", "%5s%d", &s, &i) | 
 | 	will set s to "12345" and i to 67 while | 
 | 	   Sscanf(" 12 34 567 ", "%5s%d", &s, &i) | 
 | 	will set s to "12" and i to 34. | 
 |  | 
 | 	In all the scanning functions, a carriage return followed | 
 | 	immediately by a newline is treated as a plain newline | 
 | 	(\r\n means the same as \n). | 
 |  | 
 | 	In all the scanning functions, if an operand implements method | 
 | 	Scan (that is, it implements the Scanner interface) that | 
 | 	method will be used to scan the text for that operand.  Also, | 
 | 	if the number of arguments scanned is less than the number of | 
 | 	arguments provided, an error is returned. | 
 |  | 
 | 	All arguments to be scanned must be either pointers to basic | 
 | 	types or implementations of the Scanner interface. | 
 |  | 
 | 	Like Scanf and Fscanf, Sscanf need not consume its entire input. | 
 | 	There is no way to recover how much of the input string Sscanf used. | 
 |  | 
 | 	Note: Fscan etc. can read one character (rune) past the input | 
 | 	they return, which means that a loop calling a scan routine | 
 | 	may skip some of the input.  This is usually a problem only | 
 | 	when there is no space between input values.  If the reader | 
 | 	provided to Fscan implements ReadRune, that method will be used | 
 | 	to read characters.  If the reader also implements UnreadRune, | 
 | 	that method will be used to save the character and successive | 
 | 	calls will not lose data.  To attach ReadRune and UnreadRune | 
 | 	methods to a reader without that capability, use | 
 | 	bufio.NewReader. | 
 | */ | 
 | package fmt |