Go 语言 fmt 包占位符与格式化标记全指南

顾星河
顾星河
发布时间:2026-10-13 | 4人浏览过
原创

在 Go 语言开发中,fmt 包是进行数据格式化和标准 IO 操作的核心工具。文章系统梳理了 %v、%T、%d、%f 等常用占位符的使用场景,深入讲解如何通过数字标记精确控制输出的宽度、精度及正负号状态,帮助开发者避免低级错误并提升代码可读性。

核心功能与适用场景

Go 语言的 fmt 包提供了多种以 f 结尾的格式化函数,根据输出目标的不同进行选择:

  • fmt.Printf:直接格式化并打印到标准输出(终端)。
  • fmt.Sprintf:返回格式化后的字符串,常用于拼接日志或构建消息体。
  • fmt.Fprintf:将格式化结果写入 io.Writer(如文件)。
  • fmt.Errorf:生成带格式化内容的 error 类型,便于追踪错误上下文。
  • fmt.Sscanf / fmt.Fscanf:从字符串或 Reader 中反向解析数据。

基础数据结构占位符

在处理结构体和接口时,这三个占位符最能反映数据的完整度。假设有一个结构体定义如下:

type Example struct {
    Content string
}
var data = Example{Content: "例子"}

%v:值展示

默认格式输出数据值。若实现了 Error() string 接口的对象(如 error),则只输出错误文本。

fmt.Printf("%v", data)
// 输出: {例子}

%+v:含字段名展示

与 %v 类似,但在输出结构体时会附加字段名称,非常适合 Debug 阶段排查结构体内容。

fmt.Printf("%+v", data)
// 输出: {Content:例子}

%#v:源码级展示

输出数据的 Go 语法表示形式,包含完整的类型名(包名.类型名)。在调试复杂嵌套结构时非常有用。

fmt.Printf("%#v", data)
// 输出: main.Example{Content:"例子"}

类型标识与特殊字符

获取数据类型

%T 专门用于输出变量的类型信息,无需转换为字符串即可确认其底层类型。

fmt.Printf("%T", data)
// 输出: main.Example

转义百分号

如需在输出中显示字面量 %,需使用 %% 进行转义。

fmt.Printf("%%")
// 输出: %

数值类型格式化规范

布尔值 (%t)

直接打印 true 或 false。

fmt.Printf("%t", true)
// 输出: true

进制转换与宽度

二进制与 Unicode 码点:%b 用于整数二进制;%c 将整型转为对应的 Unicode 字符。

十进制宽度控制:%5d(右对齐补空格)、%-5d(左对齐)、%05d(左侧补零)。

fmt.Printf("|%5d|%-5d|%05d|", 1, 1, 1)
// 输出: |    1|1    |00001|

八进制:%o 为常规八进制;%#o 带 0 前缀。

fmt.Printf("%#o", 10)
// 输出: 012

十六进制:%x/%X 分别输出小写与大写字母;%#x 带 0x 前缀。

fmt.Printf("%#X", 13)
// 输出: 0XD

Unicode 规范化:%U 输出 Unicode 编码(如 U+4E2D);%#U 同时显示对应的汉字。

fmt.Printf("%#U", 0x82d7)
// 输出: U+82D7 '苗'

浮点数精度处理

科学计数法:%e/%E 分别对应大小写的科学计数法输出。

定点数精度:%f 默认保留 6 位小数。%.2f 可固定保留 2 位(按四舍六入五成双规则)。

fmt.Printf("%.2f", 10.235)
// 输出: 10.23 (注意非传统四舍五入)

智能精简:%g 会自动选择最短的表示方式(通常是去除末尾无意义的 0),配合精度限制总有效数字位数。

fmt.Printf("%.3g", 12.3456)
// 输出: 12.3

字符串与字节切片

直接解析:%s 将字符串或字节切片直接展开为字符序列。

fmt.Printf("%s", []byte("test"))
// 输出: test

引号包裹:%q 使用双引号包裹并自动转义特殊字符;%#q 使用反引号包裹适合多行文本。

fmt.Printf("%q", "hello\nworld")
// 输出: "hello\nworld"

fmt.Printf("%#q", "多行\n文本")
// 输出: `多行
文本`

字节转十六进制:%x 将字符串或切片转为 Hex 格式输出。

fmt.Printf("%x", "苗")
// 输出: e88b97

指针地址与辅助标记

内存地址:%p 输出带 0x 前缀的十六进制地址;%#p 不带前缀。

num := 2
fmt.Printf("%p", &num)
// 输出: 0xc0000a1d0

符号与填充标记

这些单字符标记可以穿插在占位符中:

  • +:强制显示数字的正负号(%+d 会输出 +2 或 -2)。
  • -:左对齐填充(如 %-10s)。
  • ' ':在正数前留一个空格位置,使正负数纵向排列整齐。
  • 0:右侧数字不足时左侧补零,但会受正负号影响排在符号之后。

以上就是 Go 语言中 20 个占位符的详细整理,更多关于 Go 语言高级特性的资料请关注本站其它相关文章!

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表