go 中的 fmt 占位符

通用占位符

%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
相关推荐
胚芽鞘68137 分钟前
关于java项目中maven的理解
java·数据库·maven
岁忧2 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
CJi0NG2 小时前
【自用】JavaSE--算法、正则表达式、异常
java
Nejosi_念旧2 小时前
解读 Go 中的 constraints包
后端·golang·go
一斤代码2 小时前
vue3 下载图片(标签内容可转图)
前端·javascript·vue
风无雨2 小时前
GO 启动 简单服务
开发语言·后端·golang
Hellyc2 小时前
用户查询优惠券之缓存击穿
java·redis·缓存
中微子2 小时前
React Router 源码深度剖析解决面试中的深层次问题
前端·react.js
小明的小名叫小明2 小时前
Go从入门到精通(19)-协程(goroutine)与通道(channel)
后端·golang
光影少年2 小时前
从前端转go开发的学习路线
前端·学习·golang