fmt 可以理解为 Format(格式)的缩写——因为它擅长格式化数据(比如把数字嵌进句子中间)。fmt 就是 Go 语言的"终端对话工具",让你能在屏幕上显示东西,也能从键盘获取输入。
fmt包的常用指令
| 概念 | 对应 fmt 函数 |
|---|---|
| 标准输出(打印到屏幕) | Print、Println、Printf |
| 标准输入(从键盘读) | Scan、Scanln、Scanf |
| 格式化字符串(不打印) | Sprintf |
更底层的io包
Go 里其实还有更底层的 I/O 包,但 fmt 是最常用、最方便的那个:
- 底层:os 包(直接操作文件描述符)
- 带缓冲:bufio 包(性能更好)
- 格式化:fmt 包(你平时最需要的)
关于带缓冲
不带缓冲(直接写文件):
像你写一个字,就跑去邮局寄一封信,写1000个字,跑1000趟邮局,累死,而且慢;
带缓冲(用 bufio):
像你先在本子上写1000个字,写完了整本一起寄,只跑1趟邮局,快很多。
花式print
- Print:打印,无换行
- Println:打印,有换行(日常最常用)
- Printf:打印,需格式化(%s、%d、%v 等)
- Sprint:不打印,返回拼接的字符串(S = String)
- Sprintln:不打印,返回带换行的字符串
- Sprintf:不打印,返回格式化后的字符串
scan 的 八 三种写法
| 函数 | 停止条件 | 对换行的处理 | 格式要求 | 典型场景 |
|---|---|---|---|---|
Scan | 读够数量为止 | 换行当作分隔符(跳过) | 无,空格/换行分隔即可 | 灵活输入,数量固定 |
Scanln | 遇到换行立即停 | 换行是终点(不可跨行) | 无,空格分隔即可 | 要求用户一行输完 |
Scanf | 读够数量为止 | 由格式字符串决定 | 必须匹配格式 | 固定格式输入(如 3,5) |
格式化
| 0 | 格式化 | 描述 | 接收类型 |
|---|---|---|---|
| 1 | %% | 输出百分号% | 任意 |
| 2 | %s | 输出string/[] byte值 | string,[] byte |
| 3 | %q | 格式化字符串,输出的字符串两端有双引号"" | string,[] byte |
| 4 | %d | 输出十进制整型值 | 整型 |
| 5 | %f | 输出浮点数 | 浮点 |
| 6 | %e | 输出科学计数法形式 ,也可以用于复数 | 浮点 |
| 7 | %E | 与%e相同 | 浮点 |
| 8 | %g | 根据实际情况判断输出%f或者%e,会去掉多余的 0 | 浮点 |
| 9 | %b | 输出整型的二进制表现形式 | 数字 |
| 10 | %#b | 输出二进制完整的表现形式 | 数字 |
| 11 | %o | 输出整型的八进制表示 | 整型 |
| 12 | %#o | 输出整型的完整八进制表示 | 整型 |
| 13 | %x | 输出整型的小写十六进制表示 | 数字 |
| 14 | %#x | 输出整型的完整小写十六进制表示 | 数字 |
| 15 | %X | 输出整型的大写十六进制表示 | 数字 |
| 16 | %#X | 输出整型的完整大写十六进制表示 | 数字 |
| 17 | %v | 输出值原本的形式,多用于数据结构的输出 | 任意 |
| 18 | %+v | 输出结构体时将加上字段名 | 任意 |
| 19 | %#v | 输出完整 Go 语法格式的值 | 任意 |
| 20 | %t | 输出布尔值 | 布尔 |
| 21 | %T | 输出值对应的 Go 语言类型值 | 任意 |
| 22 | %c | 输出 Unicode 码对应的字符 | int32 |
| 23 | %U | 输出字符对应的 Unicode 码 | rune,byte |
| 24 | %p | 输出指针所指向的地址 | 指针 |

