1. 介绍

文档地址:https://pkg.go.dev/fmt

Go 标准库之 fmt 包实现了格式化 IO,也就是类似于 C 语言的 printf 和 scanf 方式的格式化。

控制格式化的字符串中,以百分号(%)作为格式的通配符,后面跟着不同的字母表示不同的类型格式。例如 %d 表示10进制整数,于是有以下例子:

import "fmt"

func fmtTest() {
	i := 23
    str := "good"
    fmt.Printf("%d:%s\n", i, str)
}

/* 输出结果
23:good
*/

%d 表示一个10进制整数,而 fmt.Printf() 方法在它的首个格式化字符串参数中找到它后,就从后续的参数里取到变量 i,将变量 i 的值输出到 %d 所占的位置。如果格式化字符串中包含多个以 % 表示的格式,就会依次从后面的参数中取参数值以格式所对应的类型,输出到那个位置。

2. 格式

通用格式:

%v 任何值的默认格式,对于结构体只会显示每个成员的值
%+v 对于结构体还会显示每个成员的字段名称
%#v Go语法的值,还会显示结构体的类型名

%T 值的类型

%% 表示百分号%

使用 %v 对于一些复合结构所打印的格式如下:

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

布尔值:

%t 布尔值

整数:

%b 2进制整数
%d 10进制整数
%o 8进制整数
%O 8进制整数,带有0o前缀
%x 16进制整数,使用字母a-f
%X 16进制整数,使用字母A-F

%c 值对应的unicode字符
%q 值对应的unicode字符,带单引号
%U unicode格式

浮点数:

%f 浮点数,默认宽度和精度

%9f 宽度为9,默认精度
%.2f 默认宽度,精度为2
%9.2 宽度为9,精度为2
%9. 宽度为9,精度为0

%e 科学技术法,使用e
%E 科学技术法,使用E
%g 普通用%f,指数大用%e
%G 普通用%f,指数大用%E
%x 16进制,使用字母a-f
%X 16进制,使用字母A-F

字符串:

%s 字符串

%q 带有双引号
%x 16进制,使用字母a-f
%X 16进制,使用字母A-F

slice:

%p 第0号元素的16进制地址,以0x作前缀

指针:

%p 16进制,以0x作前缀

除了在 % 和字母中间加精度和宽度,还可以在中间加其它的一些标记:

+ 对于整数和浮点数,总是显示正号或者负号
- 在右边加空格
# 对于不同格式,在前面加0b、0x、0
空格 就算数字为整数不显示正号,也会在前面显示一个空格
0 用0代替开头的空格

3. 函数

3.1 异常

func Errorf

func Errorf(format string, a ...interface{}) error

格式化字符串,返回一个error对象。

3.2 输出

func Fprint

func Fprint(w io.Writer, a ...interface{}) (n int, err error)

将对象写到IO中,返回写入的字节数。

func Fprintf

func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)

格式化字符串,写到IO中,返回写入的字节数。

func Fprintln

func Fprintln(w io.Writer, a ...interface{}) (n int, err error)

将对象写到IO中,然后换行,返回写入的字节数。

func Print

func Print(a ...interface{}) (n int, err error)

将对象写到标准输出。

func Printf

func Printf(format string, a ...interface{}) (n int, err error)

按格式将对象写到标准输出。

func Println

func Println(a ...interface{}) (n int, err error)

将对象写到标准输出,然后换行。

func Sprint

func Sprint(a ...interface{}) string

将对象写到字符串返回。

func Sprintf

func Sprintf(format string, a ...interface{}) string

将对象按格式写到字符串返回。

func Sprintln

func Sprintln(a ...interface{}) string

将对象写到字符串加上换行返回。

3.3 输入

func Fscan

func Fscan(r io.Reader, a ...interface{}) (n int, err error)

从IO读取写到对象,返回读取的字节数。

func Fscanf

func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)

从IO读取写到对象,指定格式,返回读取的字节数。

func Fscanln

func Fscanln(r io.Reader, a ...interface{}) (n int, err error)

从IO读取写到对象,读到换行时停止,返回读取的字节数。

func Scan

func Scan(a ...interface{}) (n int, err error)

从标准输入读对象。

func Scanln

func Scanln(a ...interface{}) (n int, err error)

从标准输入读对象,读到换行时停止。

func Sscan

func Sscan(str string, a ...interface{}) (n int, err error)

从字符串读取对象。

func Sscanf

func Sscanf(str string, format string, a ...interface{}) (n int, err error)

从字符串按照格式读取对象。

func Sscanln

func Sscanln(str string, a ...interface{}) (n int, err error)

从字符串读取对象,到换行时停止。