章节

1.4 格式化输出

本篇学习 Go 的格式化输出,占位符、精度、宽度、对齐与格式化字符串生成,并能写出清晰的控制台输出。

格式化输出

概念说明

格式化输出用于把变量按照指定格式组合成文本。
Go 里最常用的是 fmt.Printf,它会根据格式字符串中的占位符,把后面的变量依次填进去。

例如:

1
fmt.Printf("姓名:%s,年龄:%d\n", name, age)

其中 %s%d 就是占位符。
格式化输出常用于输出资料卡、计算结果、调试信息、表格对齐等场景。

语法/规则

  1. fmt.Printf("格式字符串", 值1, 值2, ...):格式化并直接输出到控制台。
  2. fmt.Sprintf("格式字符串", 值1, 值2, ...):格式化后返回字符串,不会直接输出。
  3. 占位符数量通常要和后面的值数量匹配。
  4. 占位符类型要和变量类型匹配,例如字符串用 %s,整数用 %d,小数常用 %f
  5. \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)

基础格式化示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
package main

import "fmt"

func main() {
	name := "阿斌"
	age := 18
	score := 93.456
	passed := true

	fmt.Printf("姓名:%s\n", name)
	fmt.Printf("年龄:%d\n", age)
	fmt.Printf("成绩:%.2f\n", score)
	fmt.Printf("是否通过:%t\n", passed)
	fmt.Printf("默认格式:%v\n", score)
	fmt.Printf("变量类型:%T\n", score)
}

输出结果:

1
2
3
4
5
6
姓名:阿斌
年龄:18
成绩:93.46
是否通过:true
默认格式:93.456
变量类型:float64

说明:%.2f 表示保留 2 位小数,输出时会按指定精度进行舍入。

宽度、补零与对齐示例

格式化输出还可以控制最小宽度、补零和左右对齐,常用于输出表格或编号。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
package main

import "fmt"

func main() {
	id := 7
	name := "Go"
	price := 19.9

	fmt.Printf("|%4d|%-6s|%8.2f|\n", id, name, price)
	fmt.Printf("订单号:%04d\n", id)
}

输出结果:

1
2
|   7|Go    |   19.90|
订单号:0007

说明:

  1. %4d 表示整数至少占 4 个字符宽度,默认右对齐。
  2. %-6s 表示字符串至少占 6 个字符宽度,并且左对齐。
  3. %8.2f 表示浮点数至少占 8 个字符宽度,并保留 2 位小数。
  4. %04d 表示整数至少占 4 位,不足的地方用 0 补齐。

生成格式化字符串

如果只是想得到一段格式化后的字符串,而不是立刻输出,可以使用 fmt.Sprintf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package main

import "fmt"

func main() {
	name := "小王"
	score := 88.5

	message := fmt.Sprintf("%s的成绩是 %.1f 分", name, score)
	fmt.Println(message)
}

输出结果:

1
小王的成绩是 88.5 分

说明:fmt.Sprintf 会返回字符串,所以可以先保存到变量里,再用于输出、拼接或后续处理。

常见错误

  1. 占位符和变量类型不匹配,例如用 %d 输出字符串,会出现 %!d(string=...) 这类提示。
  2. 忘记写 \n,多次 Printf 的输出会挤在同一行。
  3. 占位符数量和变量数量不一致,容易出现 %!s(MISSING) 或多余参数提示。
  4. fmt.Sprintf 当成 fmt.Printf 使用,只调用却不接收返回值,控制台不会看到输出。
  5. 想输出百分号时直接写 %,应改成 %%
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字