格式化动词#
| 格式化动词 |
含义 |
%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
|