格式化动词#
格式化动词 |
含义 |
%v |
默认格式 |
%T |
数据的类型 |
%% |
% 本身 |
使用%v
时不同类型默认对应的格式化动词如下:
数据类型 |
格式化动词 |
说明 |
bool |
%t |
|
int int8 等 |
%d |
|
uint uint8 等 |
%d |
%#v 时对应%#x |
float32 complex64 等 |
%g |
|
string |
%s |
|
chan |
%p |
|
pointer |
%p |
|
布尔型#
格式化动词 |
含义 |
示例 |
结果 |
%t |
true 或false |
1>2 |
false |
格式化动词 |
含义 |
示例 |
结果 |
%b |
二进制 |
90 |
1011010 |
%c |
对应的 Unicode 字符 |
90 |
Z |
%d |
十进制 |
90 |
90 |
%o |
八进制 |
90 |
132 |
%O |
带0o 前缀的八进制 |
90 |
0o132 |
%q |
用单引号包括的对应的 Unicode 字符,并且特殊字符会进行转义 |
90 |
‘Z’ |
%x |
小写的十六进制 |
90 |
5a |
%X |
大写的十六进制 |
90 |
5A |
%U |
Unicode 格式:U+1234 ;与U+%04X 相同 |
90 |
U+005A |
浮点型和复数型#
格式化动词 |
含义 |
示例 |
结果 |
%b |
十进制无小数的科学计数法表示浮点数,指数部分是2 的幂次方 |
3.14 |
7070651414971679p-51 |
%e |
小写e 科学记数法 |
3.14 |
3.140000e+00 |
%E |
大写E 科学记数法 |
3.14 |
3.140000E+00 |
%f |
常规的小数 |
3.14 |
3.140000 |
%F |
同%f |
3.14 |
3.140000 |
%g |
大指数时同%e ,否则同%f |
|
|
%G |
大指数时同%E ,否则同%F |
|
|
%x |
小写的十六进制 |
3.14 |
0x1.91eb851eb851fp+01 |
%X |
大写的十六进制 |
3.14 |
0X1.91EB851EB851FP+01 |
字符串和字节切片#
格式化动词 |
含义 |
示例 |
结果 |
%s |
原样 |
abc 中国(中间是 tab) |
abc 中国 |
%q |
加双引号,并且特殊字符会进行转义 |
abc 中国(中间是 tab) |
“abc\t中国” |
%x |
小写的十六进制,带前缀0x |
abc 中国(中间是 tab) |
61626309e4b8ade59bbd |
%X |
大写的十六进制,带前缀0X |
abc 中国(中间是 tab) |
61626309E4b8EDE59BBD |
格式化动词 |
含义 |
%p |
首元素地址,用加前缀0x 的小写十六进制数表示 |
格式化动词 |
含义 |
示例 |
结果 |
%p |
加前缀0x 的小写十六进制 |
|
|
%b
、%d
、%o
、%x
和%X
也可用于指针。
其它标志#
格式化动词 |
含义 |
%+d %+f 等 |
对于数值型,总是打印符号+ /- |
%+v |
对于结构体将显示对应字段名 |
默认是左对齐
,加上-
后则右对齐
。
格式化动词 |
含义 |
%#b |
加前缀0b |
%#o |
加前缀0o |
%#x |
加前缀0x |
%#X |
加前缀0X |
%#p |
去掉前缀0x |
%#q |
如果字符串可以用反引号括起来,则打印原始(用反引号括起来的)字符串 |
%#e %#E %#f %#F |
总是打印小数点 |
%#g %#G |
总是打印小数点,且不删除尾部的0 |
%#U |
如果字符是可打印的,会以U+0078 'x' 的形式输出。 |
%#v |
对于复合类型,会显示其完整的创建表达式。对于浮点数中的无穷大(Inf)和非数字(NaN),会以+Inf 、-Inf 和NaN 的形式输出 |
格式化动词 |
含义 |
% d % f 等 |
对于数值类型,如果是正数,在前面留一个空格代替正号,实现与负数在符号上的对齐 |
% x % X |
在打印字符串或切片时,会在字节之间添加空格 |
w.p
宽度和精度#
w
和p
分别为宽度和精度的具体数值。
格式化动词 |
含义 |
%wd |
仅指定宽度,实际宽度超出时按实际宽度显示,不足时左边用空格 补齐 |
%.pd |
仅指定精度,实际宽度超出时按实际宽度显示,不足时左边用0 补齐 |
%w.pd |
同时指定宽度和精度,先用%.pd 格式化,再用%wd 格式化 |
%wf |
仅指定宽度,精度默认,实际宽度(含小数点及小数部分)超出时按实际宽度显示,不足时左边用空格 补齐 |
%w.f |
指定宽度,精度为0 ,实际宽度(不含小数点及小数部分)超出时按实际宽度显示,不足时左边用空格 补齐 |
%.pf |
仅指定精度,小数部分超出时截断,不足时右边用0 补齐 |
%w.pf |
同时指定宽度和精度,先格式化精度,再格式化宽度,宽度不足时左边用空格 补齐 |
*
可对w.p
中的w
或/和p
进行占位,解决/简化运行时对数据进行不同宽度、精度的格式化。
1
2
3
|
fmt.Printf("%*.*f\n", 8, 2, f)
//与以下等效
fmt.Printf("%8.2f\n", f)
|
0
前缀#
0
需要在指定了w.p
且w>0
时使用才有效。
格式化动词 |
含义 |
%0w.pd |
实际宽度超出时按实际宽度显示,不足时左边用0 补齐 |
%0w.pf |
先格式化精度,再格式化宽度,宽度不足时左边用0 补齐 |
[n]
索引#
默认情况下,一个格式化动词
对应一个操作数
,且顺序固定。
若使用[n]
索引,则可不必拘泥于操作数
的顺序,且在同一条格式化语句中可以多次对同一个值进行格式化。示例如下:
1
2
|
fmt.Printf("%[2]d,%[1]d\n", a, b) //显示为 b,a
fmt.Printf("%[1]T,%[1]d\n", a) //显示为 a的类型,a的值
|
特别注意 1:n
是从1
开始!
特别注意 2:[n]
会影响后续索引!
1
|
fmt.Printf("%d %d %#[1]x %#x", 16, 17) //输出 16 17 0x10 0x11
|