- 一直都搞不清楚
fmt.Printf
格式化输出的 各种参数是什么意思。虽然无关大雅吧,但是存在即合理,这么多人用一定有其独到之处😁。
fmt
fmt
包实现了类似C语言printf
和scanf
的格式化I/O
。格式化动作(‘verb’)源自C语言但更简单。- 分类,大概可以按一下几种进行划分。
通用:
%v
值的默认格式表示%+v
类似%v
,但输出结构体时会添加字段名%#v
值的Go语法表示%T
值的类型的Go语法表示%%
百分号
布尔值:
整数:
%b
表示为二进制%c
该值对应的unicode
码值%d
表示为十进制%o
表示为八进制%q
该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示%x
表示为十六进制,使用a-f
%X
表示为十六进制,使用A-F
%U
表示为Unicode
格式:U+1234
,等价于"U+%04X"
浮点数与复数
%b
无小数部分、二进制指数的科学计数法,如-123456p-78
%e
科学计数法,如-1234.456e+78
%E
科学计数法,如-1234.456E+78
%f
有小数部分但无指数部分,如123.456
%F
等价于%f
%g
根据实际情况采用%e
或%f
格式(以获得更简洁、准确的输出)%G
根据实际情况采用%E
或%F
格式(以获得更简洁、准确的输出)
字符串和[]byte
%s
直接输出字符串或者[]byte
%q
该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示%x
每个字节用两字符十六进制数表示(使用a-f)%X
每个字节用两字符十六进制数表示(使用A-F)
指针
格式化错误
- 如果给某个占位符提供了非法的参数,如给
%d
提供了一个字符串,生成的字符串会包含该问题的描述,如下所例:
Printf("%d", hi)
Printf("hi", "guys")
Printf("hi%d")
Printf("%*s", 4.5, "hi")
Printf("%.*s", 4.5, "hi")