格式化输出
概念说明
格式化输出用于把变量按照指定格式组合成文本。
Go 里最常用的是 fmt.Printf,它会根据格式字符串中的占位符,把后面的变量依次填进去。
例如:
| |
其中 %s、%d 就是占位符。
格式化输出常用于输出资料卡、计算结果、调试信息、表格对齐等场景。
语法/规则
fmt.Printf("格式字符串", 值1, 值2, ...):格式化并直接输出到控制台。fmt.Sprintf("格式字符串", 值1, 值2, ...):格式化后返回字符串,不会直接输出。- 占位符数量通常要和后面的值数量匹配。
- 占位符类型要和变量类型匹配,例如字符串用
%s,整数用%d,小数常用%f。 \n表示换行,\t表示制表符,%%表示输出一个百分号。
常用占位符
| 占位符 | 含义 | 示例 |
|---|---|---|
%v | 按默认格式输出任意值 | fmt.Printf("%v\n", score) |
%T | 输出变量类型 | fmt.Printf("%T\n", score) |
%s | 输出字符串 | fmt.Printf("%s\n", name) |
%d | 输出十进制整数 | fmt.Printf("%d\n", age) |
%f | 输出浮点数 | fmt.Printf("%f\n", price) |
%.2f | 输出浮点数并保留 2 位小数 | fmt.Printf("%.2f\n", price) |
%t | 输出布尔值 | fmt.Printf("%t\n", passed) |
%c | 按字符输出 | fmt.Printf("%c\n", ch) |
%q | 带引号输出字符串或字符,适合观察空字符串、空格等内容 | fmt.Printf("%q\n", text) |
%% | 输出百分号 | fmt.Printf("完成度:%d%%\n", percent) |
基础格式化示例
| |
输出结果:
| |
说明:%.2f 表示保留 2 位小数,输出时会按指定精度进行舍入。
宽度、补零与对齐示例
格式化输出还可以控制最小宽度、补零和左右对齐,常用于输出表格或编号。
| |
输出结果:
| |
说明:
%4d表示整数至少占 4 个字符宽度,默认右对齐。%-6s表示字符串至少占 6 个字符宽度,并且左对齐。%8.2f表示浮点数至少占 8 个字符宽度,并保留 2 位小数。%04d表示整数至少占 4 位,不足的地方用0补齐。
生成格式化字符串
如果只是想得到一段格式化后的字符串,而不是立刻输出,可以使用 fmt.Sprintf。
| |
输出结果:
| |
说明:fmt.Sprintf 会返回字符串,所以可以先保存到变量里,再用于输出、拼接或后续处理。
常见错误
- 占位符和变量类型不匹配,例如用
%d输出字符串,会出现%!d(string=...)这类提示。 - 忘记写
\n,多次Printf的输出会挤在同一行。 - 占位符数量和变量数量不一致,容易出现
%!s(MISSING)或多余参数提示。 - 把
fmt.Sprintf当成fmt.Printf使用,只调用却不接收返回值,控制台不会看到输出。 - 想输出百分号时直接写
%,应改成%%。