前言:
Go 语言中的 fmt 包提供了多种输出函数,其中 Print、Println和Printf 是最常用的三个函数。它们在功能和使用上有一些关键区别,以下是详细的对比和分析。
基本功能
Print 函数将参数写入标准输出,不添加任何格式或换行符。多个参数之间会以空格分隔,但不会自动换行。
fmt.Print("Hello", "golang")
fmt.Print(1, 2, 3)
输出结果:
Println
Println 的功能与 Print 类似,但会在输出结束后自动添加换行符。多个参数之间同样以空格分隔。
fmt.Println("Hello", "golang")
fmt.Println(1, 2, 3)
打印结果:
Printf
Printf 是格式化输出函数,允许通过占位符指定输出的格式。它不会自动添加空格或换行符,格式完全由用户控制。
fmt.Printf("Name: %v, Age: %v\n", "Alice", 25)
fmt.Printf("Name: %v, Age: %v", "Bob", 22)
打印结果:
也就是说 Printf 的第一个参数是格式字符串,后续参数会根据占位符替换格式字符串中的对应部分。
占位符
通用占位符
%v
:默认格式,适用于任意类型(自动推导)。%+v
:输出结构体时添加字段名。%#v
:输出值的 Go 语法表示(如结构体的完整定义)。%T
:输出值的类型(如int
、string
)。%%
:输出百分号%
本身。
布尔占位符
%t
:输出布尔值true
或false
。
整数占位符
%b
:二进制格式。%c
:对应的 Unicode 字符。%d
:十进制格式。%o
:八进制格式。%O
:带前缀0o
的八进制格式(Go 1.13+)。%x
:小写十六进制(如0x1a
)。%X
:大写十六进制(如0X1A
)。%U
:Unicode 格式(如U+1234
)。
浮点数占位符
%b
:科学计数法(如123456p-5
)。%e
:小写科学计数法(如1.234567e+08
)。%E
:大写科学计数法(如1.234567E+08
)。%f
:十进制浮点数(如123.456000
)。%F
:同%f
。%g
:自动选择%e
或%f
(根据精度)。%G
:自动选择%E
或%F
(根据精度)。
字符串与字节切片占位符
%s
:直接输出字符串或字节切片。%q
:带引号的字符串(如"hello"
),非 ASCII 字符会转义。%x
:小写十六进制(每字节两个字符)。%X
:大写十六进制(每字节两个字符)。
指针占位符
%p
:输出指针地址(如0x1400012e010
),格式为十六进制带0x
前缀。
宽度与精度控制
占位符可通过以下格式指定宽度和精度:%[宽度][.精度]动词
例如:
%5d
:输出至少 5 位宽度的整数(右对齐)。%.2f
:输出保留 2 位小数的浮点数。%10.3s
:输出字符串的前 3 个字符,总宽度为 10(右对齐)。
总结
- Print:简单输出,无换行,适合紧凑格式。
- Println:简单输出,自动换行,适合调试和日志。
- Printf:格式化输出,适合复杂格式需求。