32.1 fmt包格式化

上一章我们有提到fmt格式化I/O,这一章我们就详细来说说。在fmt包,有关格式化输入输出的方法就两大类:Scan 和 Print ,分别在scan.go 和 print.go 文件中。

print.go文件中定义了如下函数:

func Printf(format string,  a ...interface{}) (n int,  err error)
func Fprintf(w io.Writer,  format string,  a ...interface{}) (n int,  err error)
func Sprintf(format string,  a ...interface{}) string
func Print(a ...interface{}) (n int,  err error)
func Fprint(w io.Writer,  a ...interface{}) (n int,  err error)
func Sprint(a ...interface{}) string
func Println(a ...interface{}) (n int,  err error)
func Fprintln(w io.Writer,  a ...interface{}) (n int,  err error)
func Sprintln(a ...interface{}) string

这9个函数,按照两个维度来说明,基本上可以说明白了。当然这两个维度是我个人为了记忆而分,并不是官方的说法。

一:如果把"Print"理解为核心关键字,那么后面跟的后缀有"f"和"ln"以及"",着重的是输出内容的最终结果;

如果后缀是"f", 则指定了format 如果后缀是"ln", 则有换行符

Println、Fprintln、Sprintln  输出内容时会加上换行符;
Print、Fprint、Sprint        输出内容时不加上换行符;
Printf、Fprintf、Sprintf     按照指定格式化文本输出内容。

二:如果把"Print"理解为核心关键字,那么前面的前缀有"F"和"S"以及"",着重的是输出内容的目标(终端);

如果前缀是"F", 则指定了io.Writer 如果前缀是"S", 则是输出到字符串

Print、Printf、Println      输出内容到标准输出os.Stdout;
Fprint、Fprintf、Fprintln   输出内容到指定的io.Writer;
Sprint、Sprintf、Sprintln   输出内容到字符串。

scan.go文件中定义了如下函数:

func Scanf(format string,  a ...interface{}) (n int,  err error)
func Fscanf(r io.Reader,  format string,  a ...interface{}) (n int,  err error)
func Sscanf(str string,  format string,  a ...interface{}) (n int,  err error)
func Scan(a ...interface{}) (n int,  err error)
func Fscan(r io.Reader,  a ...interface{}) (n int,  err error)
func Sscan(str string,  a ...interface{}) (n int,  err error)
func Scanln(a ...interface{}) (n int,  err error)
func Fscanln(r io.Reader,  a ...interface{}) (n int,  err error)
func Sscanln(str string,  a ...interface{}) (n int,  err error) 

这9个函数可以扫描格式化文本以生成值。同样也可以按照两个维度来说明。

一:如果把"Scan"理解为核心关键字,那么后面跟的后缀有"f"和"ln"以及"",着重的是输入内容的结果;

如果后缀是"f", 则指定了format 如果后缀是"ln", 则有换行符

Scanln、Fscanln、Sscanln    读取到换行时停止,并要求一次提供一行所有条目;
Scan、Fscan、Sscan          读取内容时不关注换行;
Scanf、Fscanf、Sscanf       根据格式化文本读取。

二:如果把"Scan"理解为核心关键字,那么前面的前缀有"F"和"S"以及"",着重的是输入内容的来源(终端);

如果前缀是"F", 则指定了io.Reader 如果前缀是"S", 则是从字符串读取

Scan、Scanf、Scanln     从标准输入os.Stdin读取文本;
Fscan、Fscanf、Fscanln  从指定的io.Reader接口读取文本;
Sscan、Sscanf、Sscanln  从一个参数字符串读取文本。
下一节:在应用上,我们主要讲讲格式化verb ,fmt包中格式化的主要功能函数都在format.go文件中。