# 通用占位符
## %v
值的默认格式表示
```go
fmt.Printf("%v\n", 100)}//100
```
## %+v
类似%v,但输出结构体时会添加字段名
```go
o := struct{ name string }{"tim"}
fmt.Printf("%+v\n", o)}}
//{name:tim}
```
## %#v
值的 Go 语法表示
```go
o := struct{ name string }{"tim"}
fmt.Printf("%#v\n", o) }
//struct { name string }{name:"tim"}
```
## %T
打印值的类型
```go
o := struct{ name string }{"tim"}
fmt.Printf("%T\n", o) }
//struct { name string }
```
## %%
百分号
```go
fmt.Printf("100%%\n") }//100%
```
# 布尔型
true 或 false
```go
t := true
fmt.Printf("value: %t", t)
```
# 整形
## %b
表示为二进制
```go
fmt.Printf("%b\n", 65)//1000001
```
## %c
该值对应的unicode码值
```go
fmt.Printf("%c\n", 65)//A
```
## %d
表示为十进制
```go
fmt.Printf("%d\n", 65)//65
```
## %o
表示为八进制
```go
fmt.Printf("%o\n", 65)//101
```
## %x
表示为十六进制,使用a-f
```go
fmt.Printf("%x\n", 65)//41
```
## %X
表示为十六进制,使用A-F
```go
fmt.Printf("%X\n", 65)//41
```
## %U
表示为Unicode格式:U+1234,等价于”U+%04X”
```go
fmt.Printf("%U\n", 65) // U+0041
```
## %q
该值对应的单引号括起来的go语法字符字面值必要时会采用安全的转义表示
```go
fmt.Printf("%q\n", 65)//'A'
```
# 浮点数与复数
## %b
无小数部分、二进制指数的科学计数法,如-123456p-78
```go
fmt.Printf("%b\n", 12.34)//6946802425218990p-49
```
## %e
科学计数法,如-1234.456e+78
```go
fmt.Printf("%e\n", f)//1.234000e+01
```
## %G
根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)
```go
fmt.Printf("%G\n", f)//12.34
```
## %g
根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)
```go
fmt.Printf("%g\n", f)//12.34
```
## %F
等价于%f
```go
fmt.Printf("%F\n", 12.34)//12.340000
```
## %f
有小数部分但无指数部分,如123.456
```go
fmt.Printf("%f\n", f)//12.340000
```
## %E
科学计数法,如-1234.456E+78
```go
fmt.Printf("%E\n", f)//1.234000E+01
```
# 字符串和[]byte
## %s
直接输出字符串或者[]byte
```go
fmt.Printf("%s\n", "tim")//tim
```
## %q
该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示
```go
fmt.Printf("%q\n", "tim")//"tim"
```
## %X
每个字节用两字符十六进制数表示(使用A-F)
```go
fmt.Printf("%X\n", "tim")//E5BEAEE5AEA2
```
## %x
每个字节用两字符十六进制数表示(使用a-f)
```go
fmt.Printf("%x\n", "tim")//e5beaee5aea2
```
# 指针
## %p
表示为十六进制,并加上前导的0x
```go
t := []int{1}
fmt.Printf("value: %p", t)
// value: 0x14000190008
```
# 宽度标识符
## %f
默认宽度,默认精度
```go
v := 92873.2309837
fmt.Printf("value: %f\n", v)
// value: 92873.230984
```
## %9f
宽度9,默认精度
```go
fmt.Printf("value: %9f\n", v)
// value: 92873.230984
```
## %9.f
宽度9,精度0
```go
fmt.Printf("value: %9.f\n", v)
// value: 92873
```
## %9.2f
宽度9,精度2
```go
fmt.Printf("value: %9.2f\n", v)
// value: 92873.23
```
## %.2f
默认宽度,精度2
```go
fmt.Printf("value: %.2f\n", v)
// value: 92873.23
```
# 其他flag
## '+'
总是输出数值的正负号;对%q(%+q)会生成全部是ASCII字符的输出(通过转义)
```go
v := -92873.2309837
fmt.Printf("value: %+f", v)
```
## ' '
对数值,正数前加空格而负数前加负号;对字符串采用%x或%X时(% x或% X)会给各打印的字节之间加空格
```go
v := 92873.2309837
fmt.Printf("value: % f", v)
```
## '0'
使用0而不是空格填充,对于数值类型会把填充的0放在正负号后面
```go
v := -92873.2309837
fmt.Printf("value: %07.f", v)
// value: -092873
```
## '#'
八进制数前加0(%#o),十六进制数前加0x(%#x)或0X(%#X),指针去掉前面的0x(%#p)对%q(%#q),对%U(%#U)会输出空格和单引号括起来的go字面值
```go
v := 101
fmt.Printf("value: %#o", v)
// value: 0145
```
## '-'
在输出右边填充空白而不是默认的左边(即从默认的右对齐切换为左对齐)
```go
v := 101.35345345
fmt.Printf("value: %-3.1f", v)
// value: 101.4
```
# 最后
如果文章可以给你带来一丝收获,请举起你的手指,给我来个一键三连吧!
![扫码_搜索联合传播样式-标准色版.png](https://pic1.58cdn.com.cn/nowater/webim/big/n_v2a3ebf65885c84a1aac037cf9109b9e87.bmp)
有疑问加站长微信联系(非本文作者)