fmt 方法可以大致分为 print , scan 两类, 根据基础方法可以构建特定方法。
- Print 将参数写入字符串或io.writer
- scan 从字符串或 io.Reader 读取指定数据, 并输出
print 方法的几种模式
- 基础模式: [name] Print 返回默认格式化的字符串
- 写入模式: F[name] 返回写入字节 例如: Fprint
- 字符模式: S[name] 返回字符 例如: Sprint
- 模板模式: [name]f 根据模板格式化 例如: Printf
- 换行模式: [name]ln 输出后带换行 例如: Println
scan 方法的几种模式, 所有方法都返回 写入 字节数(n) 及 错误(err)
- 基础模式: [name] Scan 将输入值写入参数中
- 读取模式: F[name] 从io.Reader 读取数据 例如: Fscan
- 字符模式: S[name] 从字符串读取数据 例如: Sscan
- 模板模式: [name]f 根据模板提取数据 例如: scanf
- 换行模式: [name]ln 以 换 行符号做读取结束 例如: scanln
- func Errorf(format string, a …any) error
- func Fprint(w io.Writer, a …any) (n int, err error)
- func Fprintf(w io.Writer, format string, a …any) (n int, err error)
- func Fprintln(w io.Writer, a …any) (n int, err error)
- func Fscan(r io.Reader, a …any) (n int, err error)
- func Fscanf(r io.Reader, format string, a …any) (n int, err error)
- func Fscanln(r io.Reader, a …any) (n int, err error)
- func Print(a …any) (n int, err error)
- func Printf(format string, a …any) (n int, err error)
- func Println(a …any) (n int, err error)
- func Scan(a …any) (n int, err error)
- func Scanf(format string, a …any) (n int, err error)
- func Scanln(a …any) (n int, err error)
- func Sprint(a …any) string
- func Sprintf(format string, a …any) string
- func Sprintln(a …any) string
- func Sscan(str string, a …any) (n int, err error)
- func Sscanf(str string, format string, a …any) (n int, err error)
- func Sscanln(str string, a …any) (n int, err error)
- 占位符
- %T 打印变量的类型
- %d 打印10进制整数
- %x和%X 打印16进制整数
- %f 打印浮点数,可以通过%8.2f,%-8.2f,%08.2f,% f等来控制打印字符串的空格
- %q 能打印加引号的字符串。当您的数据可能有不可见字符(如空字符串)时,这是有用的,因为引用的字符串将它们打印为转义序列。
- %p 打印变量的指针地址。当您正在调试代码并且希望检查不同的指针变量是否引用相同的数据时,这个方法非常有用。
显式参数索引
在 Printf、Sprintf 和 Fprintf 中,每个格式化动词的默认行为是格式化调用中传递的连续参数。但是,动词前的符号 [n] 表示要对第 n 个单索引参数进行格式化。宽度或精度的“*”之前的相同符号选择保存该值的参数索引。在处理括号表达式 [n] 后,后续动词将使用参数 n+1、n+2 等,除非另有说明
fmt.Sprintf("%[2]d %[1]d\n", 11, 22)
//输出 22 11
fmt.Sprintf("%[3]*.[2]*[1]f", 12.0, 2, 6)
等于
fmt.Sprintf("%6.2f", 12.0)
//输出 12