Skip to content

Latest commit

 

History

History
145 lines (90 loc) · 6.41 KB

File metadata and controls

145 lines (90 loc) · 6.41 KB

Table of Contents generated with DocToc

fmt

fmt包用于实现格式化的输入输出,其功能类似于 C 语言中的printf和scanf。格式化动词(format verbs)提供了多种方式来控制数据的输出格式。

一般动词

  • %v:以默认格式打印值。对于结构体,%+v 会打印字段名。
  • %#v:以 Go 语法表示值。
  • %T:以 Go 语法表示值的类型。
  • %%:打印一个百分号字符

%v 和 %t 对布尔值的输出是相同的,但使用 %t 可以明确地表明你正在格式化布尔值。

整数类型

  • %b:二进制表示。
  • %c:对应的 Unicode 字符。
  • %d:十进制表示。
  • %o:八进制表示。
  • %O:带 0o 前缀的八进制表示。
  • %q:单引号字符字面量,使用 Go 语法进行安全转义。
  • %x:十六进制表示,字母 a-f 使用小写。
  • %X:十六进制表示,字母 A-F 使用大写。
  • %U:Unicode 格式,类似于 U+1234。

浮点数和复数

  • %b:无小数点的科学计数法,以 2 的幂为指数,例如 -123456p-78。
  • %e:科学计数法,使用小写的 e,例如 -1.234456e+78。
  • %E:科学计数法,使用大写的 E,例如 -1.234456E+78。
  • %f:十进制形式,无科学计数法,例如 123.456。
  • %F:与 %f 相同,表示十进制形式。
  • %g:自动选择 %e 或 %f,对于较大指数使用 %e,对于其他情况使用 %f。精度会影响显示的有效数字数量。
  • %G:自动选择 %E 或 %F,与 %g 类似,但使用大写的 E 和 %F。
  • %x:十六进制表示,使用小数点的科学计数法,例如 -0x1.23abcp+20。
  • %X:十六进制表示,使用大写字母,类似 -0X1.23ABCP+20。

字符串和字节切片

  • %s:原始字节。
  • %q:双引号字符串,使用 Go 语法进行安全转义。
  • %x:十六进制表示,每两个字节一个字符。
  • %X:十六进制表示,每两个字节一个字符,大写字母。

指针

对于指针,%p 用于打印指针地址,以十六进制表示,带 0x 前缀。%b, %d, %o, %x, %X 等动词也可以用来处理指针,但它们会将指针值作为整数处理。

切片

对于切片,%p 用于打印第一个元素的地址,以十六进制表示,带 0x 前缀。 其他格式化动词(如 %b, %d, %o, %x, %X)在切片上没有特殊意义,主要用于处理切片内容的打印

指定宽度与精度

宽度指的是格式化输出的最小宽度。它确保输出至少占据指定的字符位置。如果实际内容小于指定的宽度,格式化函数会在内容的左侧(默认)填充空格,直到达到指定的宽度。如果实际内容的宽度超过了指定的宽度,fmt 包的格式化动词会忽略宽度设置,直接输出实际内容的完整形式。对于数字和字符串,这个设置影响输出的对齐方式。

设置宽度:在格式化动词前面加上一个数字,如 %10f。这表示输出的总宽度至少为 10 个字符。

精度指的是显示的小数点后的位数(对于浮点数)或字符数(对于字符串)。它控制了输出的详细程度。例如,对于浮点数,精度设置决定了显示多少位小数;对于字符串,精度设置限制了显示的最大字符数。

在格式化动词中加上一个句点和数字,如 %.2f。这表示浮点数的精度为 2,即小数点后显示 2 位数字

可以同时设置宽度和精度。宽度确定输出的总宽度,而精度确定内容的详细程度。例如 %9.2f 表示宽度为 9,总宽度包含小数点及两位小数。

其他标志

除了基本的格式化动词外,还有一些其他的标志可以进一步控制输出的格式。这些标志包括 +、-、#、 (空格)、0 等,以及 * 符号。

+:始终打印符号

对于数字类型,总是打印正负号。 对于 %q,保证输出 ASCII 字符串

-:左对齐字段

将字段内容左对齐,填充空间在右侧。

#:使用特殊格式

为二进制、八进制和十六进制值添加前缀。 对于 %q,如果 [strconv.CanBackquote] 返回 true,打印原始(反引号)字符串。 对于 %e、%E、%f、%F、%g 和 %G,始终打印小数点。 对于 %g 和 %G,不移除尾随零。 对于 %U,以 U+0078 'x' 形式写出可打印字符

(空格):留空空间

为数字之间留空格以避免省略符号。 在打印字节切片的十六进制表示时,添加空格分隔每两个字节

0:用零填充

用零填充数字,移动填充在符号后面。

*:动态指定宽度和精度

在 Go 的 fmt 包中,一些格式化动词(如 %s, %d, %f 等)可以接受宽度和精度参数。这些参数通常是直接在格式化字符串中指定的,例如 %10s 表示宽度为 10 的字符串。如果你使用 * 符号,宽度或精度将通过额外的参数传递,而不是硬编码

语法:

%*s:宽度由后续参数提供。

%.*s:精度由后续参数提供。

%*.*s:宽度和精度都由后续参数提供。

参考