# fmt.Printf总结
概述
printf系列函数都支持format格式化参数,在这里我们按照占位符将被替换的变量类型划分,方便查询和记忆。
# 1 常用格式功能说明
| 动 词 | 功 能 | 
|---|---|
| %v | 按值的本来值输出 | 
| %+v | 在 %v 基础上,对结构体字段名和值进行展开 | 
| %#v | 输出 Go 语言语法格式的值 | 
| %T | 输出 Go 语言语法格式的类型和值 | 
| %% | 输出 % 本体 | 
| %b | 整型以二进制方式显示 | 
| %o | 整型以八进制方式显示 | 
| %d | 整型以十进制方式显示 | 
| %x | 整型以十六进制方式显示 | 
| %X | 整型以十六进制、字母大写方式显示 | 
| %U | Unicode 字符 | 
| %f | 浮点数 | 
| %p | 指针,十六进制方式显示 | 
# 2 具体printf方法的格式说明
# 2.1 通用占位符
str:="Hello world"
//相应值的默认格式
fmt.Printf("%v",str )
fmt.Println()
//类似%v,但输出结构体时会添加字段名式
fmt.Printf("%+v",str )
fmt.Println()
//相应值的Go语法表示
fmt.Printf("%#v",str )
fmt.Println()
//相应值的类型的Go语法表示	
fmt.Printf("%T",str )
fmt.Println()
//字面上的百分号,并非值的占位符
fmt.Printf("%%" )
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| 占位符 | 说明 | 示例 | 输出 | 
|---|---|---|---|
| %v | 相应值的默认格式 | Printf("%v",str ) | Hello world | 
| %+v | 类似%v,但输出结构体时会添加字段名式 | Printf("%+v",str ) | Hello world | 
| %#v | 相应值的Go语法表示 | Printf("%#v",str ) ) | "Hello world" | 
| %T | 相应值的类型的Go语法表示 | Printf("%T",str )) | string | 
| %% | 字面上的百分号,并非值的占位符 | Printf("%%" ) | % | 
# 2.2 布尔值
| 占位符 | 说明 | 示例 | 输出 | 
|---|---|---|---|
| %t | 单词true或false | Printf("%t",true) | true | 
# 2.3 整数
| 占位符 | 说明 | 示例 | 输出 | 
|---|---|---|---|
| %b | 二进制表示 | Printf("%b",5) | 101 | 
| %c | 该值对应的unicode码值 | Printf("%c",0x4E2d) | 中 | 
| %d | 十进制表示 | Printf("%d",0x12) | 18 | 
| %o | 八进制表示 | Printf("%o",10) | 12 | 
| %q | 单引号围绕的字符字面值,由Go语法安全转译 | Printf("%q",0x4E2d) | '中' | 
| %x | 十六进制表示,字母形式为小写a-f | Printf("%x",13) | d | 
| %X | 十六进制表示,字母形式为大写A-F | Printf("%X",13) | D | 
| %U | Unicode格式:U+1234,等价于"U+%04X" | Printf("%U",0x4E2d) | U+4E2D | 
# 2.4 浮点数与复数
| 占位符 | 说明 | 示例 | 输出 | 
|---|---|---|---|
| %b | 无小数部分、指数为二的幂的科学计数法,与strconv.FormatFloat的'b'转换格式一致。 | Printf("%b",10.20) | 5742089524897382p-49 | 
| %e | 科学计数法,如-1234.456e+78 | Printf("%e",10.20) | 1.020000e+01 | 
| %E | 科学计数法,如-1234.456E+78 | Printf("%E",10.20) | 1.020000E+01 | 
| %f | 有小数部分但无指数部分,如123.456 | Printf("%f",10.20) | 10.200000 | 
| %g | 根据实际情况采用%e或%f格式(以获得更简洁、准确的输出) | Printf("%g",10.20) | 10.2 | 
| %G | 根据实际情况采用%E或%F格式(以获得更简洁、准确的输出) | Printf("%G",10.20) | (10.2+2i) | 
# 2.5 字符串与字节切片
| 占位符 | 说明 | 示例 | 输出 | 
|---|---|---|---|
| %s | 输出字符串表示(string类型或[]byte) | Printf("%s",[]byte("Go语言")) | Go语言 | 
| %q | 双引号围绕的字符串,由Go语法安全的转译 | Printf("%q","Go语言") | "Go语言" | 
| %x | 十六进制,小写字母,每字节两个字符 | Printf("%x","golang") | 676f6c616e67 | 
| %X | 十六进制,大写字母,每字节两个字符 | Printf("%X","golang") | 676F6C616E67 | 
| %10s | 输出字符串最小宽度为10(右对齐) | Printf("%10s", "oldboy") | |
| %-10s | 输出字符串最小宽度为10(左对齐) | Printf("%-10s", "oldboy") | |
| %.5s | 输出字符串最大宽度为5 | Printf("%.5s", "oldboy") | |
| %5.10s | 输出字符串最小宽度为5,最大宽度为10 | Printf("%5.10s", "oldboy") | |
| %-5.10s | 输出字符串最小宽度为5,最大宽度为10(左对齐) | Printf("%-5.10s", "oldboy") | |
| %5.3s | 输出字符串宽度为5,如果原字符串宽度大于3,则截断 | Printf("%5.3s", "oldboy") | |
| %010s | 如果宽度小于10,就会在字符串前面补零 | Printf("%010s", "oldboy") | 
# 2.6 指针
| 占位符 | 说明 | 示例 | 输出 | 
|---|---|---|---|
| %p | 十六进制表示,前缀 0x | Printf("%p", &str) | 0xc0000321f0 | 
| %#p | 不带前缀 0x | Printf("%#p", &str) | c0000321f0 | 
