Golang fmt.Printf 函数
最后修改时间 2025 年 5 月 8 日
本教程解释了如何在 Go 中使用 fmt.Printf
函数。我们将通过格式化输出的实际示例来涵盖格式化基础知识。
fmt.Printf
函数根据格式说明符进行格式化,并写入标准输出。它返回写入的字节数和任何错误。这是 Go 中格式化输出的主要函数。
在 Go 中,fmt.Printf
使用以 % 开头的格式动词来指定值的显示方式。这些动词控制输出中的填充、精度和数据类型表示。
基本的 Printf 示例
fmt.Printf
最简单的用法以默认格式显示变量。此示例演示了基本的字符串和数字格式化。
注意:格式字符串必须与参数数量匹配。
package main import "fmt" func main() { name := "Alice" age := 28 height := 1.68 fmt.Printf("Name: %s, Age: %d, Height: %.2f\n", name, age, height) }
格式字符串包含三个动词:%s 用于字符串,%d 用于整数,%.2f 用于具有 2 位小数的浮点数。值按顺序插入。
整数格式化
整数格式化为基表示和填充提供了各种选项。此示例展示了不同的整数格式化技术。
package main import "fmt" func main() { num := 42 fmt.Printf("Decimal: %d\n", num) fmt.Printf("Binary: %b\n", num) fmt.Printf("Hexadecimal: %x\n", num) fmt.Printf("Octal: %o\n", num) fmt.Printf("With sign: %+d\n", num) fmt.Printf("Padded: %6d\n", num) fmt.Printf("Leading zeros: %06d\n", num) }
每个动词以不同的方式显示数字。%b 显示二进制,%x 显示十六进制,%o 显示八进制。填充会添加空格或零以达到指定的宽度。
浮点数格式化
浮点数可以用精度、科学计数法和自动格式化进行格式化。此示例演示了浮点数格式化选项。
package main import "fmt" func main() { pi := 3.1415926535 fmt.Printf("Default: %f\n", pi) fmt.Printf("Precision 2: %.2f\n", pi) fmt.Printf("Precision 4: %.4f\n", pi) fmt.Printf("Scientific: %e\n", pi) fmt.Printf("Large exponent: %g\n", 123456789.123456789) fmt.Printf("Width 10, precision 3: %10.3f\n", pi) }
精度控制小数位数。%e 使用科学计数法,而 %g 根据指数大小自动选择 %f 和 %e。
字符串格式化
字符串格式化包括填充、截断和引用选项。此示例展示了各种字符串格式化技术。
package main import "fmt" func main() { str := "Hello, 世界" fmt.Printf("Default: %s\n", str) fmt.Printf("Quoted: %q\n", str) fmt.Printf("Hex: % x\n", str) fmt.Printf("Right-padded: %-20s!\n", str) fmt.Printf("Left-padded: %20s!\n", str) fmt.Printf("Truncated: %.5s\n", str) }
%q 添加引号,%x 显示十六进制字节,%.5s 在 5 个字节后截断(不是 rune)。填充会在指定宽度内向左或向右对齐文本。
布尔值和指针格式化
布尔值和指针有特定的格式动词。此示例演示了如何显示这些类型。
package main import "fmt" func main() { flag := true ptr := &flag fmt.Printf("Boolean: %t\n", flag) fmt.Printf("Pointer: %p\n", ptr) fmt.Printf("Pointer value: %v\n", ptr) fmt.Printf("Type and value: %T %v\n", ptr, ptr) }
%t 将布尔值格式化为“true”或“false”。%p 以十六进制显示指针地址。%T 显示值的类型,这对于调试很有用。
结构体格式化
可以使用不同的动词格式化结构体,以控制输出的详细程度。此示例展示了结构体格式化选项。
package main import "fmt" type Person struct { Name string Age int } func main() { p := Person{"Bob", 42} fmt.Printf("Default: %v\n", p) fmt.Printf("With field names: %+v\n", p) fmt.Printf("Go syntax: %#v\n", p) fmt.Printf("Type: %T\n", p) }
%v 显示值,%+v 包含字段名称,%#v 显示可以重新创建该值的 Go 语法。这些对于调试复杂类型很有用。
使用 Stringer 进行自定义格式化
类型可以实现 Stringer 接口来定制它们的格式。此示例演示了用户定义类型的自定义格式化。
package main import "fmt" type Point struct { X, Y int } func (p Point) String() string { return fmt.Sprintf("(%d,%d)", p.X, p.Y) } func main() { p := Point{3, 4} fmt.Printf("Point: %v\n", p) fmt.Printf("String: %s\n", p) fmt.Printf("Go syntax: %#v\n", p) }
通过实现 String(),Point 控制其在格式化输出中的显示方式。这由 %v 和 %s 格式动词自动调用。
来源
本教程通过格式化输出的实际示例和各种格式化技术,涵盖了 Go 中的 fmt.Printf
函数。