跳到主要内容

Go中fmt格式化动词

· 📖 3分钟 ⏳
無心

在 Go 语言的 fmt 包中,有许多格式化动词可以用于格式化不同类型的数据。以下是一些常见的格式化动词的介绍:

1. 通用格式化动词

  • %v:默认格式输出。
  • %#v:Go 语法格式输出。
  • %T:输出变量的类型。
  • %%:输出百分号本身。

2. 布尔类型

  • %t:布尔值的 truefalse

    fmt.Printf("%t\n", true)  // 输出: true

3. 整数类型

  • %b:二进制表示。

  • %c:对应的 Unicode 码点的字符。

  • %d:十进制表示。

  • %o:八进制表示。

  • %O:以 0o 前缀的八进制表示。

  • %x:十六进制表示,字母小写。

  • %X:十六进制表示,字母大写。

  • %U:Unicode 格式,如 U+1234

  • %q:单引号围绕的字符字面值,使用 Go 语法。

    fmt.Printf("%b\n", 123)  // 输出: 1111011
    fmt.Printf("%d\n", 123) // 输出: 123
    fmt.Printf("%o\n", 123) // 输出: 173
    fmt.Printf("%x\n", 123) // 输出: 7b
    fmt.Printf("%X\n", 123) // 输出: 7B
    fmt.Printf("%U\n", '世') // 输出: U+4E16
    fmt.Printf("%q\n", 65) // 输出: 'A'

4. 浮点数与复数类型

  • %b:指数为二的幂的科学计数法,与 strconv.FormatFloat‘b’ 格式一致。

  • %e:科学计数法,例如 -1234.456e+78

  • %E:科学计数法,例如 -1234.456E+78

  • %f``%F:有小数点而无指数,例如 123.456

  • %g:根据实际情况选择 %e%f 以产生更紧凑的(无末尾的零)输出。

  • %G:根据实际情况选择 %E%F 以产生更紧凑的(无末尾的零)输出。

    fmt.Printf("%e\n", 123.456)  // 输出: 1.234560e+02
    fmt.Printf("%f\n", 123.456) // 输出: 123.456000
    fmt.Printf("%g\n", 123.456) // 输出: 123.456

5. 字符串和字节切片

  • %s:直接输出字符串或字节切片。

  • %q:双引号围绕的字符串字面值,使用 Go 语法。

  • %x:十六进制表示,字母小写。

  • %X:十六进制表示,字母大写。

    fmt.Printf("%s\n", "Hello")     // 输出: Hello
    fmt.Printf("%q\n", "Hello") // 输出: "Hello"
    fmt.Printf("%x\n", "Hello") // 输出: 48656c6c6f
    fmt.Printf("%X\n", "Hello") // 输出: 48656C6C6F

6. 指针

  • %p:十六进制表示的内存地址。

    fmt.Printf("%p\n", &struct{}{})  // 输出类似: 0xc00000a060

7. 宽度与精度控制

  • %f:浮点数,保留两位小数。

  • %9f:最小宽度为 9,默认精度。

  • %.2f:默认宽度,精度为 2。

  • %9.2f:宽度为 9,精度为 2。

  • %9.f:宽度为 9,精度为 0。

    fmt.Printf("%9.f\n", 123.45)   // 输出:      123
    fmt.Printf("%9.2f\n", 123.45) // 输出: 123.45
    fmt.Printf("%.2f\n", 123.456) // 输出: 123.46

8. 布尔、整数、浮点数的零值处理

  • %0d:填充前导零。

  • %-9d:左对齐宽度。

    fmt.Printf("%02d\n", 5)   // 输出: 05
    fmt.Printf("%-5d\n", 5) // 输出: 5
标签: