在 Go 语言的 fmt
包中,有许多格式化动词可以用于格式化不同类型的数据。以下是一些常见的格式化动词的介绍:
1. 通用格式化动词
%v
:默认格式输出。%#v
:Go 语法格式输出。%T
:输出变量的类型。%%
:输出百分号本身。
2. 布尔类型
%t
:布尔值的true
或false
。fmt.Printf("%t\n", true) // 输出: true
3. 整数类型
%b
:二进制表示。%c
:对应的 Unicode 码点的字符。%d
:十进制表示。%o
:八进制表示。%O
:以0o
前缀的八进制表示。%x
:十六进制表示,字母小写。%X
:十六进制表示,字母大写。%U
:Unicode 格式,如U+1234
。%q
:单引号围绕的字符字面值,使用 Go 语法。fmt.Printf("%b\n", 123) // 输出: 1111011
fmt.Printf("%d\n", 123) // 输出: 123
fmt.Printf("%o\n", 123) // 输出: 173
fmt.Printf("%x\n", 123) // 输出: 7b
fmt.Printf("%X\n", 123) // 输出: 7B
fmt.Printf("%U\n", '世') // 输出: U+4E16
fmt.Printf("%q\n", 65) // 输出: 'A'
4. 浮点数与复数类型
%b
:指数为二的幂的科学计数法,与strconv.FormatFloat
的‘b’
格式一致。%e
:科学计数法,例如-1234.456e+78
。%E
:科学计数法,例如-1234.456E+78
。%f``%F
:有小数点而无指数,例如123.456
。%g
:根据实际情况选择%e
或%f
以产生更紧凑的(无末尾的零)输出。%G
:根据实际情况选择%E
或%F
以产生更紧凑的(无末尾的零)输出。fmt.Printf("%e\n", 123.456) // 输出: 1.234560e+02
fmt.Printf("%f\n", 123.456) // 输出: 123.456000
fmt.Printf("%g\n", 123.456) // 输出: 123.456
5. 字符串和字节切片
%s
:直接输出字符串或字节切片。%q
:双引号围绕的字符串字面值,使用 Go 语法。%x
:十六进制表示,字母小写。%X
:十六进制表示,字母大写。fmt.Printf("%s\n", "Hello") // 输出: Hello
fmt.Printf("%q\n", "Hello") // 输出: "Hello"
fmt.Printf("%x\n", "Hello") // 输出: 48656c6c6f
fmt.Printf("%X\n", "Hello") // 输出: 48656C6C6F
6. 指针
%p
:十六进制表示的内存地址。fmt.Printf("%p\n", &struct{}{}) // 输出类似: 0xc00000a060
7. 宽度与精度控制
%f
:浮点数,保留两位小数。%9f
:最小宽度为 9,默认精度。%.2f
:默认宽度,精度为 2。%9.2f
:宽度为 9,精度为 2。%9.f
:宽度为 9,精度为 0。fmt.Printf("%9.f\n", 123.45) // 输出: 123
fmt.Printf("%9.2f\n", 123.45) // 输出: 123.45
fmt.Printf("%.2f\n", 123.456) // 输出: 123.46
8. 布尔、整数、浮点数的零值处理
%0d
:填充前导零。%-9d
:左对齐宽度。fmt.Printf("%02d\n", 5) // 输出: 05
fmt.Printf("%-5d\n", 5) // 输出: 5