Go fmt包的格式“占位符”

fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. 格式“占位符”衍生自C,但比C更简单。

一般

  • %v 相应值的默认格式。在打印结构体时,“加号”标记(%+v)会添加字段名
  • %#v 相应值的Go语法表示
  • %T 相应值的类型的Go语法表示
  • %% 字面上的百分号,并非值的占位符

type Human struct {
    Name string
}

var people = Human{Name:"tom"}


fmt.Printf("%v", people)   // {tom}
fmt.Printf("%+v", people) // {Name:tom}
fmt.Printf("#v", people)    // main.Human{Name:"tom"}
fmt.Printf("%T", people)   // main.Human
fmt.Printf("%%")             // Printf("%%")

布尔

  • %t 单词 true 或 false。

代码

fmt.Printf("%t", true) // true

整数

  • %b 二进制表示
  • %c 相应Unicode码点所表示的字符
  • %d 十进制表示
  • %o 八进制表示
  • %q 单引号围绕的字符字面值,由Go语法安全地转义
  • %x 十六进制表示,字母形式为小写 a-f
  • %X 十六进制表示,字母形式为大写 A-F
  • %U Unicode格式:U+1234,等同于 "U+%04X"
Printf("%b", 5)      // 101
Printf("%c", 0x4E2D) // 中
Printf("%d", 0x12)   //18
Printf("%d", 10)     //12
Printf("%q", 0x4E2D) //'中'
Printf("%x", 13)     //d
Printf("%X", 13)     //D
Printf("%U", 0x4E2D) //U+4E2D

浮点数及其复合构成

  • %b 无小数部分的,指数为二的幂的科学计数法,与 strconv.FormatFloat的 ‘b’ 转换格式一致。例如 -123456p-78
  • %e 科学计数法,例如 -1234.456e+78
  • %E 科学计数法,例如 -1234.456E+78
  • %f 有小数点而无指数,例如 123.456
  • %g 根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的0)输出
  • %G 根据情况选择 %E 或 %f 以产生更紧凑的(无末尾的0)输出
Printf("%e", 10.2)      //1.020000e+01
Printf("%e", 10.2)      //1.020000E+01
Printf("%f", 10.2)      //10.200000
Printf("%g", 10.20)     //10.2
Printf("%G", 10.20+2i)  //(10.2+2i)

字符串与字节切片

  • %s 字符串或切片的无解译字节
  • %q 双引号围绕的字符串,由Go语法安全地转义
  • %x 十六进制,小写字母,每字节两个字符
  • %X 十六进制,大写字母,每字节两个字符
Printf("%s", []byte("Go"))  // Go
Printf("%q", "Go")          // "Go"
Printf("%x", "golang")      // 676f6c616e67
Printf("%X", "golang")      // 676F6C616E67

指针

  • %p 十六进制表示,前缀 0x
Printf("%p", &people)            // 0x4f57f0