1. 通用的占位符

  1. %v 值的默认格式。
  2. %+v 类似%v,但输出结构体时会添加字段名
  3. %#v  相应值的Go语法表示
  4. %T 相应值的类型的Go语法表示
  5. %% 百分号,字面上的%,非占位符含义

默认格式%v下,对于不同的数据类型,底层会去调用默认的格式化方式:

  1. bool: %t
  2. int, int8 etc.: %d
  3. uint, uint8 etc.: %d, %x if printed with %#v
  4. float32, complex64, etc: %g
  5. string: %s
  6. chan: %p
  7. pointer: %p

如果是复杂对象的话,按照如下规则进行打印:

  1. struct: {field0 field1 ...}
  2. array, slice: [elem0 elem1 ...]
  3. maps: map[key1:value1 key2:value2]
  4. pointer to above: &{}, &[], &map[]

整数类型:
  1. %b 二进制表示
  2. %c 相应Unicode码点所表示的字符
  3. %d 十进制表示
  4. %o 八进制表示
  5. %q 单引号围绕的字符字面值,由Go语法安全地转义
  6. %x 十六进制表示,字母形式为小写 a-f
  7. %X 十六进制表示,字母形式为大写 A-F
  8. %U Unicode格式:123,等同于 "U+007B"

浮点数
  1. %b 无小数部分、二进制指数的科学计数法,如-123456p-78
  2. 参见strconv.FormatFloat %e 科学计数法,如-1234.456e+78 %E
  3. 科学计数法,如-1234.456E+78 %f
  4. 有小数部分但无指数部分,如123.456 %F 等价于%f %g
  5. 根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)
  6. %e 科学计数法,例如 -1234.456e+78
  7. %E 科学计数法,例如 -1234.456E+78
  8. %f 有小数点而无指数,例如 123.456
  9. %g 根据情况选择 %e %f 以产生更紧凑的(无末尾的0)输出
  10. %G 根据情况选择 %E %f 以产生更紧凑的(无末尾的0)输出

布尔型
  1. %t true false

字符串
  1. %s 字符串或切片的无解译字节
  2. %q 双引号围绕的字符串,由Go语法安全地转义
  3. %x 十六进制,小写字母,每字节两个字符
  4. %X 十六进制,大写字母,每字节两个字符

指针
  1. %p 十六进制表示,前缀 0x