fmt官方文档说明:https://studygolang.com/pkgdocgit
import "fmt"
github
mt包实现了相似C语言printf和scanf的格式化I/O。格式化动做('verb')源自C语言但更简单。golang
verb:安全
通用:函数
%v 值的默认格式表示 %+v 相似%v,但输出结构体时会添加字段名 %#v 值的Go语法表示 %T 值的类型的Go语法表示 %% 百分号
布尔值:ui
%t 单词true或false
整数:spa
%b 表示为二进制 %c 该值对应的unicode码值 %d 表示为十进制 %o 表示为八进制 %q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示 %x 表示为十六进制,使用a-f %X 表示为十六进制,使用A-F %U 表示为Unicode格式:U+1234,等价于"U+%04X"
浮点数与复数的两个组分:指针
%b 无小数部分、二进制指数的科学计数法,如-123456p-78;参见strconv.FormatFloat %e 科学计数法,如-1234.456e+78 %E 科学计数法,如-1234.456E+78 %f 有小数部分但无指数部分,如123.456 %F 等价于%f %g 根据实际状况采用%e或%f格式(以得到更简洁、准确的输出) %G 根据实际状况采用%E或%F格式(以得到更简洁、准确的输出)
字符串和[]byte:code
%s 直接输出字符串或者[]byte %q 该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示 %x 每一个字节用两字符十六进制数表示(使用a-f) %X 每一个字节用两字符十六进制数表示(使用A-F)
指针:orm
%p 表示为十六进制,并加上前导的0x
宽度经过一个紧跟在百分号后面的十进制数指定,若是未指定宽度,则表示值时除必需以外不做填充。精度经过(可选的)宽度后跟点号后跟的十进制数指定。若是未指定精度,会使用默认精度;若是点号后没有跟数字,表示精度为0。举例以下:
%f: 默认宽度,默认精度 %9f 宽度9,默认精度 %.2f 默认宽度,精度2 %9.2f 宽度9,精度2 %9.f 宽度9,精度0
func Print(a ...interface{}) (n int, err error)
Print采用默认格式将其参数格式化并写入标准输出。若是两个相邻的参数都不是字符串,会在它们的输出之间添加空格。返回写入的字节数和遇到的任何错误。
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
Fprint采用默认格式将其参数格式化并写入w,对Print的扩展。若是两个相邻的参数都不是字符串,会在它们的输出之间添加空格。返回写入的字节数和遇到的任何错误。
func Sprint(a ...interface{}) string
Sprint采用默认格式将其参数格式化,串联全部输出生成并返回一个字符串。若是两个相邻的参数都不是字符串,会在它们的输出之间添加空格。
func Println(a ...interface{}) (n int, err error)
Println采用默认格式将其参数格式化并写入标准输出。老是会在相邻参数的输出之间添加空格并在输出结束后添加换行符。返回写入的字节数和遇到的任何错误。
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
Fprintln采用默认格式将其参数格式化并写入w。老是会在相邻参数的输出之间添加空格并在输出结束后添加换行符。返回写入的字节数和遇到的任何错误。
func Sprintln(a ...interface{}) string
Sprintln采用默认格式将其参数格式化,串联全部输出生成并返回一个字符串。老是会在相邻参数的输出之间添加空格并在输出结束后添加换行符。
func Printf(format string, a ...interface{}) (n int, err error)
Printf根据format参数生成格式化的字符串并写入标准输出。返回写入的字节数和遇到的任何错误。
即:接收一个可格式化string,而后输出到标准输出中。
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
Fprintf根据format参数生成格式化的字符串并写入w,能够理解为对Printf的扩展,写入到指定的目的地。返回写入的字节数和遇到的任何错误。
func Sprintf(format string, a ...interface{}) string
Sprintf根据format参数生成格式化的字符串并返回该字符串。
func Errorf(format string, a ...interface{}) error
Errorf根据format参数生成格式化字符串并返回一个包含该字符串的错误。
获取输入
// Scan 从标准输入中读取数据,并将数据用空白分割并解析后存入 a 提供 // 的变量中(换行符会被看成空白处理),变量必须以指针传入。 // 当读到 EOF 或全部变量都填写完毕则中止扫描。 // 返回成功解析的参数数量。
func Scan(a ...interface{}) (n int, err error) // Scanln 和 Scan 相似,只不过遇到换行符就中止扫描。 func Scanln(a ...interface{}) (n int, err error) // Scanf 从标准输入中读取数据,并根据格式字符串 format 对数据进行解析, // 将解析结果存入参数 a 所提供的变量中,变量必须以指针传入。 // 输入端的换行符必须和 format 中的换行符相对应(若是格式字符串中有换行 // 符,则输入端必须输入相应的换行符)。 // 占位符 %c 老是匹配下一个字符,包括空白,好比空格符、制表符、换行符。 // 返回成功解析的参数数量。 func Scanf(format string, a ...interface{}) (n int, err error)
// 对于 Scan 而言,回车视为空白 func main() { a, b, c := "", 0, false fmt.Scan(&a, &b, &c) fmt.Println(a, b, c) // 在终端执行后,输入 abc 1 回车 true 回车 // 结果 abc 1 true } // 对于 Scanln 而言,回车结束扫描 func main() { a, b, c := "", 0, false fmt.Scanln(&a, &b, &c) fmt.Println(a, b, c) // 在终端执行后,输入 abc 1 true 回车 // 结果 abc 1 true } // 格式字符串能够指定宽度 func main() { a, b, c := "", 0, false fmt.Scanf("%4s%d%t", &a, &b, &c) fmt.Println(a, b, c) // 在终端执行后,输入 1234567true 回车 // 结果 1234 567 true }
// 功能同上面三个函数,只不过从 r 中读取数据。 func Fscan(r io.Reader, a ...interface{}) (n int, err error) func Fscanln(r io.Reader, a ...interface{}) (n int, err error) func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error) // 功能同上面三个函数,只不过从 str 中读取数据。 func Sscan(str string, a ...interface{}) (n int, err error) func Sscanln(str string, a ...interface{}) (n int, err error) func Sscanf(str string, format string, a ...interface{}) (n int, err error)
type student struct { Name string Age int Score float32 } func main() { var str = "stu01 18 89.92" var stu student fmt.Sscanf(str, "%s %d %f", &stu.Name, &stu.Age, &stu.Score) fmt.Println(stu) }
输出:
{stu01 18 89.92}