Go语言fmt包格式化输出完全指南

阿澈
阿澈
发布时间:2026-10-15 | 5人浏览过
原创

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
%cUnicode 码点对应的字符fmt.Printf("%c", 123) → {
%UUnicode 编码 (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)表示左对齐,不足时在右侧补空格。

字面量转义

如果在格式化中需要输出一个百分号本身,必须使用双百分号 %%,它不会尝试去读取后面的参数。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表