Go 中格式化输出

General

  • %v 以默认的方式打印变量的值
  • %T 打印变量的类型

Integer

  • %+d 带符号的整型,fmt.Printf(“%+d”, 255)输出+255
  • %d 不带符号的整形,注意和 %+d 的区别。
  • %o 不带零的八进制
  • %#o 带零的八进制
  • %x 小写的十六进制
  • %X 大写的十六进制
  • %#x 带 0x 的十六进制
  • %U 打印 Unicode 字符
  • %#U 打印带字符的 Unicode
  • %b 打印整型的二进制
  • %q 打印单引号

Integer width

  • %5d 右对齐最少占 5 个位置
  • %-5d 左对齐
  • %05d 不足长度 5 前面补零。

Float

  • %f (=%.6f) 6 位小数点
  • %e (=%.6e) 6 位小数点(科学计数法)
  • %g 用最少的数字来表示
  • %.3g 最多 3 位数字来表示
  • %.3f 最多 3 位小数来表示

String

  • %s 正常输出字符串
  • %q 字符串带双引号,字符串中的引号带转义符
  • %#q 字符串带反引号,如果字符串内有反引号,就用双引号代替
  • %x 将字符串转换为小写的 16 进制格式
  • %X 将字符串转换为大写的 16 进制格式
  • % x 带空格的 16 进制格式

String Width (以 5 做例子)

  • %5s 最小宽度为 5
  • %-5s 最小宽度为 5(左对齐)
  • %.5s 最大宽度为 5
  • %5.7s 最小宽度为 5,最大宽度为 7
  • %-5.7s 最小宽度为 5,最大宽度为 7(左对齐)
  • %5.3s 如果宽度大于 3,则截断
  • %05s 如果宽度小于 5,就会在字符串前面补零

Struct

  • %v 正常打印。比如:{sam {12345 67890}}
  • %+v 带字段名称。比如:{name:sam phone:{mobile:12345 office:67890}
  • %#v 用 Go 的语法打印。 比如 main.People{name:”sam”, phone:main.Phone{mobile:”12345”, office:”67890”}}

Boolean

  • %t 打印 truefalse

Pointer

  • %p 带 0x 的指针
  • %#p 不带 0x 的指针

示例

fmt.Printf("%+d\n", 255)
fmt.Printf("%d\n", 2345)
fmt.Printf("%d\n", -2345)
fmt.Printf("%q\n", "sss")
fmt.Printf("%#q\n", "sssssss")
fmt.Printf("%#q\n", "ssss`sss")

fmt.Printf("%#x\n", 255)
fmt.Printf("%#X\n", 255)
fmt.Printf("%#o\n", 255)
fmt.Printf("%e\n", 1000024.123456)
fmt.Printf("%f\n", 1000024.123456)
fmt.Printf("%g\n", 1000024.123456)

// output
+255
2345
-2345
"sss"
`sssssss`
"ssss`sss"
0xff
0XFF
0377
1.000024e+06
1000024.123456
1.000024123456e+06