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
相关推荐
天河归来25 分钟前
第三方接口不稳定,如何让核心任务继续完成
java·大数据
Knight_AL1 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
利威尔xu1 小时前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
修己xj1 小时前
我用 AI 给自己写了一个 Markdown 编辑器,然后把它开源了
前端
FRing031 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
幸运小猿2 小时前
模拟慢上传-处理超时重试image 丢失线上问题
前端·javascript·html
砚底藏山河2 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
利威尔xu2 小时前
Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
redis·后端·微服务·面试·golang
猿究院_夏燊3 小时前
MySQL 的四种隔离级别
java·数据库·mysql
FungLeo3 小时前
成为全栈·Go 后端篇·从 Node SQLite 到 PostgreSQL:把迁移做成独立交付物
postgresql·golang·sqlite·go·数据库迁移·成为全栈