Go语言中的格式化输出主要使用fmt
包,其中包含多种占位符用于不同类型的数据格式化。以下是常用的占位符及其演示代码:
通用占位符
占位符 | 说明 |
---|---|
%v |
值的默认格式表示 |
%+v |
类似%v,但输出结构体时会添加字段名 |
%#v |
值的Go语法表示 |
%T |
值的类型的Go语法表示 |
%% |
百分号 |
布尔型占位符
占位符 | 说明 |
---|---|
%t |
true或false |
整数型占位符
占位符 | 说明 |
---|---|
%b |
二进制表示 |
%c |
对应的Unicode码点所表示的字符 |
%d |
十进制表示 |
%o |
八进制表示 |
%x |
十六进制表示,使用a-f小写 |
%X |
十六进制表示,使用A-F大写 |
%U |
Unicode格式:U+1234,等价于"U+%04X" |
浮点数与复数占位符
占位符 | 说明 |
---|---|
%b |
无小数部分、二进制指数的科学计数法 |
%e |
科学计数法,如-1234.456e+78 |
%E |
科学计数法,如-1234.456E+78 |
%f |
有小数部分但无指数部分 |
%F |
等价于%f |
%g |
根据情况选择%e或%f |
%G |
根据情况选择%E或%F |
字符串与字节切片占位符
占位符 | 说明 |
---|---|
%s |
直接输出字符串或字节切片 |
%q |
双引号括起来的字符串 |
%x |
十六进制,小写字母 |
%X |
十六进制,大写字母 |
指针占位符
占位符 | 说明 |
---|---|
%p |
十六进制表示,前缀0x |
宽度与精度控制
可以在占位符中使用宽度和精度控制:
-
%f
默认宽度,默认精度 -
%9f
宽度9,默认精度 -
%.2f
默认宽度,精度2 -
%9.2f
宽度9,精度2 -
%9.f
宽度9,精度0
演示代码
Go
package main
import "fmt"
func main() {
// 通用占位符演示
fmt.Printf("通用占位符:\n")
fmt.Printf("%%v: %v\n", "Hello")
fmt.Printf("%%+v: %+v\n", struct{ Name string }{Name: "Alice"})
fmt.Printf("%%#v: %#v\n", "Hello")
fmt.Printf("%%T: %T\n", "Hello")
fmt.Printf("%%%%: %%\n")
// 布尔型演示
fmt.Printf("\n布尔型占位符:\n")
fmt.Printf("%%t: %t\n", true)
// 整数型演示
fmt.Printf("\n整数型占位符:\n")
num := 65
fmt.Printf("%%b: %b\n", num) // 二进制
fmt.Printf("%%c: %c\n", num) // Unicode字符
fmt.Printf("%%d: %d\n", num) // 十进制
fmt.Printf("%%o: %o\n", num) // 八进制
fmt.Printf("%%x: %x\n", num) // 十六进制小写
fmt.Printf("%%X: %X\n", num) // 十六进制大写
fmt.Printf("%%U: %U\n", num) // Unicode格式
// 浮点数演示
fmt.Printf("\n浮点数占位符:\n")
f := 123.456
fmt.Printf("%%b: %b\n", f) // 科学计数法
fmt.Printf("%%e: %e\n", f) // 科学计数法小写e
fmt.Printf("%%E: %E\n", f) // 科学计数法大写E
fmt.Printf("%%f: %f\n", f) // 无指数
fmt.Printf("%%g: %g\n", f) // 根据情况选择
fmt.Printf("%%G: %G\n", f) // 根据情况选择
// 宽度和精度控制
fmt.Printf("\n宽度和精度控制:\n")
fmt.Printf("|%%9.2f|: |%9.2f|\n", f)
fmt.Printf("|%%.2f|: |%.2f|\n", f)
fmt.Printf("|%%9.f|: |%9.f|\n", f)
// 字符串演示
fmt.Printf("\n字符串占位符:\n")
str := "Hello, 世界"
fmt.Printf("%%s: %s\n", str)
fmt.Printf("%%q: %q\n", str)
fmt.Printf("%%x: %x\n", str)
fmt.Printf("%%X: %X\n", str)
// 指针演示
fmt.Printf("\n指针占位符:\n")
p := &str
fmt.Printf("%%p: %p\n", p)
}
输出结果:
Go
通用占位符:
%v: Hello
%+v: {Name:Alice}
%#v: "Hello"
%T: string
%%: %
布尔型占位符:
%t: true
整数型占位符:
%b: 1000001
%c: A
%d: 65
%o: 101
%x: 41
%X: 41
%U: U+0041
浮点数占位符:
%b: 8687443681197687p-46
%e: 1.234560e+02
%E: 1.234560E+02
%f: 123.456000
%g: 123.456
%G: 123.456
宽度和精度控制:
|%9.2f|: | 123.46|
宽度和精度控制:
|%9.2f|: | 123.46|
宽度和精度控制:
|%9.2f|: | 123.46|
|%9.2f|: | 123.46|
|%.2f|: |123.46|
|%9.f|: | 123|
|%9.f|: | 123|
字符串占位符:
%s: Hello, 世界
%s: Hello, 世界
%q: "Hello, 世界"
%x: 48656c6c6f2c20e4b896e7958c
%q: "Hello, 世界"
%x: 48656c6c6f2c20e4b896e7958c
%x: 48656c6c6f2c20e4b896e7958c
%X: 48656C6C6F2C20E4B896E7958C
指针占位符:
%p: 0xc00009c070