文章首发于个人博客
格式化动词
常规
| 格式化动词 | 含义 |
|---|
%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) | 61626309e4b8ade59bbd |
切片
| 格式化动词 | 含义 |
|---|
%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进行占位,解决/简化运行时对数据进行不同宽度、精度的格式化。
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]索引,则可不必拘泥于操作数的顺序,且在同一条格式化语句中可以多次对同一个值进行格式化。示例如下:
fmt.Printf("%[2]d,%[1]d\n", a, b)
fmt.Printf("%[1]T,%[1]d\n", a)
注意:n是从1开始!