Go语言fmt包格式化输出完全指南
Go语言的标准库 fmt 提供了强大的文本格式化能力。本文将系统梳理其核心输出函数,详解整数、浮点数、字符串等类型的占位符规范,并演示如何通过宽度和精度控制实现精准的终端与日志输出。
核心输出函数分类
fmt 包是 Go 语言中最常用的 I/O 工具库,开发者可根据是否需要换行、是否返回字符串来选择合适的方法:
Print(...interface{}):直接输出参数内容到控制台,参数间默认无空格,末尾不换行。Println(...interface{}):输出参数后自动在末尾添加空格和换行符,支持各种类型直接打印。Printf(format string, args ...interface{}):按格式字符串进行格式化输出,通常用于精确控制显示样式(如补零、限制小数位数)。Sprintf(format string, args ...interface{}):格式化内容并生成一个字符串返回值,不直接输出到控制台,常用于构建复杂的请求头或 SQL 语句。Fprintf(w io.Writer, format string, args ...interface{}):将格式化后的内容写入指定的io.Writer接口(如文件),而非仅输出到标准输出。
基础数据类型格式化
使用 Printf 时,通过百分号 % 引导特定的动词来控制参数的转换方式。如果参数数量与动词不匹配,程序运行时会触发 panic。
整数类型格式化
| 占位符 | 描述 | 示例代码 |
|---|---|---|
| %b | 二进制表示 | fmt.Printf("%b", 123) → 1111011 |
| %o | 八进制表示 | fmt.Printf("%o", 123) → 173 |
| %d | 十进制表示(最常用) | fmt.Printf("%d", 123) → 123 |
| %x / %X | 十六进制小写/大写 | %x: 7b | %X: 7B |
| %c | Unicode 码点对应的字符 | fmt.Printf("%c", 123) → { |
| %U | Unicode 编码 (U+xxxx) | fmt.Printf("%U", 123) → U+007B |
浮点数类型格式化
| 占位符 | 描述 | 示例代码 |
|---|---|---|
| %e / %E | 科学计数法 | %e: 1.234560e+02 |
| %f / %F | 定点数,默认保留6位小数 | %f: 123.456000 |
| %g / %G | 自适应最短形式,舍弃多余零 | %g: 123.456 |
其他基础类型
除了数字,Go 还提供了针对布尔值和字符串的控制符:
- 布尔值 (
%t):输出true或false。 - 字符串 (
%s):直接输出字符串或字节切片内容。 - 带引号字符串 (
%q):以双引号包裹,并对特殊字符进行转义,适合调试。 - 字符串字节 (
%x):输出每个字节的十六进制表示,常用于哈希校验或协议分析。 - 指针 (
%p):输出内存地址的十六进制值。
通用与类型检查占位符
在处理结构体或未知类型时,以下占位符非常实用:
%v:输出值的默认格式。若值是结构体,将展开其内部字段。%+v:展开结构体时,会同时输出字段名(例如:{Name:Alice Age:20})。%#v:输出该值的完整 Go 语法表示(包括类型声明),适合快速查看变量原始定义。%T:输出变量的类型(如int,string,*User)。
// 结构体示例
type User struct {
Name string
Age int
}
u := User{Name: "Alice", Age: 20}
// %+v 输出包含字段名
fmt.Printf("%+v\n", u)
// => &{Name:Alice Age:20}高级控制:宽度、精度与对齐
格式化不仅限于选择类型,还可通过 m.n 的形式精细控制输出的长度和小数位。
浮点数精度与截断
在 %f 后可用 .n 指定保留 n 位小数。结合宽度(总长度)和负号(左对齐),可实现类似表格的输出效果。
val := 123.456
// |123.456000| -> 默认6位小数,左对齐不足补空格
fmt.Printf("|%f|\n", val)
// | 123.456000| -> 总宽12,右对齐(默认)
fmt.Printf("|%12f|\n", val)
// | 123.456| -> 总宽12,仅保留3位小数
fmt.Printf("|%12.3f|\n", val)
// | 123| -> 总宽12,强制取整(无小数点)
fmt.Printf("|%12.f|\n", val)字符串长度与填充控制
对字符串也适用类似的规则:
- 最小宽度:指定最少要输出的字符数。若实际长度不足,左侧默认补空格;若加
0(如%010s),则补零。 - 最大宽度:使用小数点加数字(如
%.5s),表示截取前5个字符,超出部分直接截断。 - 对齐方向:加负号
-(如%-10s)表示左对齐,不足时在右侧补空格。
字面量转义
如果在格式化中需要输出一个百分号本身,必须使用双百分号 %%,它不会尝试去读取后面的参数。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













