fmt
fmt包
import "fmt"
- 概述
- 索引
概述
fmt 包使用函数实现 I/O 格式化(类似于 C 的 printf 和 scanf 的函数), 格式化参数源自C,但更简单
打印输出
动词:
一般:
%v默认格式的值
打印结构时,加号标志(%+ v)添加字段名称
%#v是值的Go语法表示
%T是值类型的Go语法表示
%%一个百分号; 消耗没有价值
布尔:
%t the word true or false
整数:
%b base 2
%c由相应的Unicode代码点表示的字符
%d基数10
%base 8
%q使用Go语法安全转义的单引号字符文字。
%x base 16,af为小写字母
%X base 16,AF大写字母
%U Unicode格式:U + 1234; 与“U +%04X”相同
浮点和复杂的组成部分:
%b十进制科学记数法,指数幂为2,
以strconv.FormatFloat的方式使用'b'格式,
例如-123456p-78
%e科学记数法,例如-1.234456e + 78
%E科学记数法,例如-1.234456E + 78
%f小数点但没有指数,例如123.456
%F%f的同义词
对于大指数,%g%e,否则为%f。精度将在下面讨论。
对于大指数,%G%E,否则为%F
字符串和字节片段(与这些动词等同处理):
%s字符串或切片的未解释字节
%q使用Go语法安全转义双引号字符串
%x base 16,小写,每个字节两个字符
%X base 16,大写,每个字节两个字符
指针:
%p base 16表示法,带前导0x
%v的默认格式是:
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
对于复合对象,使用这些规则以递归方式打印元素,如下所示:
struct: {field0 field1 ...}
array, slice: [elem0 elem1 ...]
maps: map[key1:value1 key2:value2]
pointer to above: &{}, &[], &map[]
宽度由动词前面的可选十进制数字指定。如果不存在,则宽度是表示该值所需的任何值。在(可选)宽度之后指定精度,后面跟着一个十进制数。如果没有句点,则使用默认精度。没有以下数字的时间段指定零的精度。例子:
%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
宽度和精度是以 Unicode 代码点为单位测量的,即符文。(这与C的 printf 不同,后者的单位总是以字节为单位)。其中一个或两个标志都可以用字符 '*' 替换,使得它们的值从下一个操作数获得,该操作数必须是 int 类型。
对于大多数值,width 是要输出的最小符号数,如果需要,可以用空格填充格式化的表单。
然而,对于字符串,字节片段和字节数组,精度会限制要格式化的输入的长度(而不是输出的大小),如果需要则会截断。通常以符文测量,但对于使用 %x 或 %X 格式格式化的这些类型,则以字节为单位进行测量。
对于浮点值,宽度设置字段的最小宽度,精度设置小数点后的位数(如果适用),但%g/%G精度设置有效数字的总数。例如,给定 12.345 格式%6.3f 打印输出 12.345,而%.3g 打印输出 12.3。%e,%f和%#g的默认精度为6;对于%g,它是唯一标识值所需的最小位数。
对于复数,宽度和精度独立应用于这两个组件,并将结果括起来,因此 %f 应用于1.2 + 3.4i会产生(1.200000 + 3.400000i)。
其他标志:
+始终打印数字值的符号;
保证%q(%+ q)的仅ASCII输出
- 在右侧而不是左侧使用空格(左侧对齐场)
#alternate format:为八进制添加前导0(%#o),为十六进制添加0x(%#x);
十六进制为0X(%#X); 抑制%p为%p(%#p);
对于%q,如果strconv.CanBackquote打印一个原始(反引号)字符串
返回true;
始终为%e,%E,%f,%F,%g和%G打印小数点;
不要删除%g和%G的尾随零;
如果字符可打印为%U(%#U),则写入例如U + 0078'x'。
''(空格)留下一个空格,用于删除号码(%d);
在字节之间放置以十六进制打印字符串或切片的空格(%x,%X)
0垫带前导零而不是空格;
对于数字,这会在符号后移动填充
标志被不期望它们的动词忽略。例如,没有替代的十进制格式,因此 %#d 和 %d 的行为相同。
对于每个类似 Printf 的函数,还有一个不带格式的打印函数,相当于对每个操作数表示 %v。另一个变体 Println 在操作数之间插入空格并附加换行符。
无论动词如何,如果操作数是接口值,则使用内部具体值,而不是接口本身。从而:
var i interface{} = 23
fmt.Printf("%v\n", i)
将打印23。
除使用动词 %T 和 %p 打印外,特殊的格式考虑适用于实现某些接口的操作数。按申请顺序:
- 如果操作数是 reflect.Value,则操作数将由其保存的具体值替换,打印将继续执行下一个规则。
2. 如果一个操作数实现了Formatter接口,它将被调用。格式化程序可以很好地控制格式。
3. 如果%v verb 与#flag(%#v)一起使用,并且操作数实现 GoStringer 接口,则会调用该语句。如果格式(对于 Println 等隐式为 %v)对字符串(%s%q%v%x%X)有效,则适用以下两个规则:
4. 如果操作数实现了错误接口,则将调用 Error 方法将对象转换为字符串,然后根据动词的需要对其进行格式化(如果有)。
5. 如果操作数实现方法 String() 字符串,则将调用该方法将对象转换为字符串,然后根据动词(如果有)格式化该字符串。
- func Errorf(format string, a ...interface{}) error
- func Fprint(w io.Writer, a ...interface{}) (n int, err error)
- func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
- func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
- func Fscan(r io.Reader, a ...interface{}) (n int, err error)
- func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
- func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
- func Print(a ...interface{}) (n int, err error)
- func Printf(format string, a ...interface{}) (n int, err error)
- func Println(a ...interface{}) (n int, err error)
- func Scan(a ...interface{}) (n int, err error)
- func Scanf(format string, a ...interface{}) (n int, err error)
- func Scanln(a ...interface{}) (n int, err error)
- func Sprint(a ...interface{}) string
- func Sprintf(format string, a ...interface{}) string
- func Sprintln(a ...interface{}) string
- func Sscan(str string, a ...interface{}) (n int, err error)
- func Sscanf(str string, format string, a ...interface{}) (n int, err error)
- func Sscanln(str string, a ...interface{}) (n int, err error)
- type Formatter
- type GoStringer
- type ScanState
- type Scanner
- type State
- type Stringer
包文件
doc.go format.go print.go scan.go
func Errorf(显示源代码)
func Errorf(format string, a ...interface{}) error
Errorf 格式根据格式说明符并返回字符串作为满足错误的值。
func Fprint(显示源代码)
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
使用其操作数的缺省格式并写入w的 Fprint 格式。当两个操作数都不是字符串时,空间会被添加。它返回写入的字节数和遇到的任何写入错误。
func Fprintf(显示源代码)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
Fprintf 根据格式说明符格式化并写入w。它返回写入的字节数和遇到的任何写入错误。
func Fprintln(显示源代码)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
Fprintln 使用其操作数的默认格式格式化并写入w。总是在操作数之间添加空格,并附加一个换行符。它返回写入的字节数和遇到的任何写入错误。
func Fscan(显示源代码)
func Fscan(r io.Reader, a ...interface{}) (n int, err error)
Fscan 扫描从r读取的文本,将连续的空格分隔值存储为连续的参数。换行占据空间。它返回成功扫描的项目数量。如果这小于参数的数量,err 会报告原因。
func Fscanf(显示源代码)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
Fscanf 扫描从 r 读取的文本,将连续的空格分隔值存储为由格式确定的连续参数。它返回成功解析的项目数。输入中的换行符必须与格式中的换行符匹配。
func Fscanln(显示源代码)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
Fscanln 与 Fscan 类似,但停止在换行符处进行扫描,并且在最终项目后必须有换行符或 EOF。
func Print(显示源代码)
func Print(a ...interface{}) (n int, err error)
使用其操作数的默认格式打印格式并写入标准输出。当两个操作数都不是字符串时,空间会被添加。它返回写入的字节数和遇到的任何写入错误。
func Printf(显示源代码)
func Printf(format string, a ...interface{}) (n int, err error)
Printf 格式根据格式说明符写入标准输出。它返回写入的字节数和遇到的任何写入错误。
func Println(显示源代码)
func Println(a ...interface{}) (n int, err error)
Println 格式使用其操作数的默认格式并写入标准输出。总是在操作数之间添加空格,并附加一个换行符。它返回写入的字节数和遇到的任何写入错误。
func Scan(显示源代码)
func Scan(a ...interface{}) (n int, err error)
扫描扫描从标准输入读取的文本,将连续的空格分隔值存储为连续的参数。换行占据空间。它返回成功扫描的项目数量。如果这小于参数的数量,err 会报告原因。
func Scanf(显示源代码)
func Scanf(format string, a ...interface{}) (n int, err error)
Scanf 扫描从标准输入中读取的文本,将连续的空格分隔值存储为由格式确定的连续参数。它返回成功扫描的项目数量。如果这小于参数的数量,err 会报告原因。输入中的换行符必须与格式中的换行符匹配。一个例外:动词%c总是扫描输入中的下一个符文,即使它是空格(或制表符等)或换行符。
func Scanln(显示源代码)
func Scanln(a ...interface{}) (n int, err error)
Scanln 与 Scan 类似,但停止在换行符处进行扫描,并且在最终项目后必须有换行符或 EOF。
func Sprint(显示源代码)
func Sprint(a ...interface{}) string
Sprint 格式使用其操作数的默认格式并返回结果字符串。当两个操作数都不是字符串时,空间会被添加。
func Sprintf(显示源代码)
func Sprintf(format string, a ...interface{}) string
Sprintf 根据格式说明符格式化并返回结果字符串。
func Sprintln(显示源代码)
func Sprintln(a ...interface{}) string
Sprintln 格式使用其操作数的默认格式并返回结果字符串。总是在操作数之间添加空格,并附加一个换行符。
func Sscan(显示源代码)
func Sscan(str string, a ...interface{}) (n int, err error)
Sscan 扫描参数字符串,将连续的空格分隔值存储为连续的参数。换行占据空间。它返回成功扫描的项目数量。如果这小于参数的数量,err 会报告原因。
func Sscanf(显示源代码)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)
Sscanf 扫描参数字符串,将连续的空格分隔值存储为由格式确定的连续参数。它返回成功解析的项目数。输入中的换行符必须与格式中的换行符匹配。
func Sscanln(显示源代码)
func Sscanln(str string, a ...interface{}) (n int, err error)
Sscanln 与 Sscan 类似,但停止在换行符处进行扫描,并且在最终项目后必须有换行符或 EOF。
type Formatter(显示源代码)
格式化程序是通过使用自定义格式化程序的值实现的接口。Format 的实现可能会调用 Sprint(f) 或 Fprint(f) 等来生成其输出。
type Formatter interface {
Format(f State, c rune)
}
type GoStringer(显示源代码)
GoStringer 由具有 GoString 方法的任何值实现,该方法定义该值的 Go 语法。GoString 方法用于将作为操作数传递给 %#v 格式的值打印出来。
type GoStringer interface {
GoString() string
}
type ScanState(显示源代码)
ScanState 表示传递给定制扫描仪的扫描仪状态。扫描仪可以做一次一个符号扫描,或要求 ScanState 发现下一个由空格分隔的令牌。
type ScanState interface {
// ReadRune从输入中读取下一个符文(Unicode代码点)。
// 如果在Scanln,Fscanln或Sscanln期间调用,ReadRune()将会
// 返回第一个'\n'或读取超出后返回EOF
// 指定的宽度。
ReadRune() (r rune, size int, err error)
// UnreadRune导致下一次调用ReadRune返回相同的符文。
UnreadRune() error
// SkipSpace会跳过输入中的空格。 新线得到适当的处理
// 正在进行的操作; 请参阅包文档
// 了解更多信息。
SkipSpace()
// 如果skipSpace为true,Token会跳过输入中的空格,然后返回
// 运行Unicode代码点c满足f(c)。 如果f为零,
// !unicode.IsSpace(c)用于; 也就是说,令牌将保持非空格
// 字符。 对于正在进行的操作,新线被适当地处理
// 执行; 有关更多信息,请参阅包文档。
// 返回的切片指向可能被覆盖的共享数据
// 通过下一次调用Token,使用ScanState调用Scan功能
// 作为输入,或当调用Scan方法返回时。
Token(skipSpace bool, f func(rune) bool) (token []byte, err error)
// Width返回width选项的值以及是否已设置。
// 该单位是Unicode代码点。
Width() (wid int, ok bool)
// 因为ReadRune是由接口实现的,所以Read永远不应该
// 由扫描例程和有效实现调用
// ScanState可以选择始终从Read返回错误。
Read(buf []byte) (n int, err error)
}
type Scanner(显示源代码)
扫描器是由任何具有 Scan 方法的值实现的,Scan 方法扫描输入以表示值并将结果存储在接收器中,该接收器必须是有用的指针。扫描方法被称为 Scan,Scanf 或 Scanln 的任何参数来实现它。
type Scanner interface {
Scan(state ScanState, verb rune) error
}
type State(显示源代码)
状态表示传递给自定义格式化程序的打印机状态。它提供对io.Writer 接口的访问,以及有关操作数格式说明符的标志和选项的信息。
type State interface {
// Write是调用以发出要打印的格式化输出的函数。
Write(b []byte) (n int, err error)
// Width返回width选项的值以及是否已设置。
Width() (wid int, ok bool)
// Precision返回精度选项的值以及是否已设置。
Precision() (prec int, ok bool)
// 标志报告是否已设置标志c(字符)。
Flag(c int) bool
}
type Stringer(显示源代码)
Stringer 由具有 String 方法的任何值实现,该方法为该值定义“native”格式。String 方法用于将作为操作数传递的值打印为接受字符串或格式未打印的打印机(如Print)的任何格式。
type Stringer interface {
String() string
}