fmt 包为我们提供了集中打印信息时需要用到这些函数:

  1. Print: 输出到控制台(不接受任何格式化,它等价于对每一个操作数都应用 %v)
  2. fmt.Print(str)
  3. Println: 1x 输出到控制台并换行
  4. fmt.Println(tmp)
  5. Printf : 只可以打印出格式化的字符串。只可以直接输出字符串类型的变量(不可以输出整形变量和整形 等)
  6. fmt.Printf("%d",a)
  7. Sprintf:格式化并返回一个字符串而不带任何输出。
  8. s := fmt.Sprintf("a %s", "string") fmt.Printf(s)
  9. Fprintf:来格式化并输出到 io.Writers 而不是 os.Stdout
  10. fmt.Fprintf(os.Stderr, an %s\n”, error”)

Printf

Printf 主要复杂的地方为格式化输出部分:

通用占位符

  1. 通用占位符:
  2. %v 值的默认格式。
  3. %+v 添加字段名(如结构体)
  4. %#v 相应值的Go语法表示
  5. %T 相应值的类型的Go语法表示
  6. %% 字面上的百分号,并非值的占位符

对于 %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

由此可以看出,默认的输出格式可以使用 %v 进行指定,除非输出其他与默认不同的格式,否则都可以使用 %v 进行替代(但是不推荐使用)

布尔值

  1. 布尔值:
  2. %t true false

整数值

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

这里没有 ‘u’ 标记。若整数为无符号类型,他们就会被打印成无符号的。类似地,这里也不需要指定操作数的大小(int8,int64)。

浮点数及复数

  1. 浮点数及复数:
  2. %b 无小数部分的,指数为二的幂的科学计数法,与 strconv.FormatFloat中的 'b' 转换格式一致。例如 -123456p-78
  3. %e 科学计数法,例如 -1234.456e+78
  4. %E 科学计数法,例如 -1234.456E+78
  5. %f 有小数点而无指数,例如 123.456
  6. %g 根据情况选择 %e %f 以产生更紧凑的(无末尾的0)输出
  7. %G 根据情况选择 %E %f 以产生更紧凑的(无末尾的0)输出

字符串和bytes的slice表示

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

指针

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

复合对象

对于复合对象,里面的元素使用如下规则进行打印:

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

宽度和精度

宽度是在 % 之后的值,如果没有指定,则使用该值的默认值,精度是跟在宽度之后的值,如果没有指定,也是使用要打印的值的默认精度.例如: %9.2f ,宽度 9 ,精度 2

  1. %f: default width, default precision
  2. %9f width 9, default precision
  3. %.2f default width, precision 2
  4. %9.2f width 9, precision 2
  5. %9.f width 9, precision 0

参考:Go语言基础—Printf格式化输出、Scanf格式化输入详解