在 Go 语言中,
fmt是最基础也是使用频率最高的标准库之一。几乎每一个 Go 程序都会用到它,无论是打印调试信息、格式化字符串、构建日志,还是从标准输入读取数据。fmt的核心作用可以用一句话概括:提供统一、强大的格式化输入输出能力。
与很多语言不同,Go 没有复杂的字符串拼接语法,而是通过 fmt 来完成大部分输出和字符串构建工作。这种设计让代码更加清晰,也更容易维护。
在日常开发中,最常用的是输出函数。fmt.Print() 用于直接输出内容,不会自动换行,适合连续拼接输出。
go
fmt.Print("Hello ")
fmt.Print("Go")
输出结果:
Hello Go
如果希望自动换行,可以使用 fmt.Println()。它不仅会在末尾加换行,还会在多个参数之间自动加空格,这是开发中最常用的打印方式。
go
fmt.Println("Hello", "Go")
输出:
Hello Go
当需要更精细的控制时,就要使用 fmt.Printf()。这个函数支持格式化字符串,通过占位符控制输出格式。
go
name := "Alice"
age := 25
fmt.Printf("name: %s age: %d\n", name, age)
输出:
makefile
name: Alice age: 25
Printf 的核心是格式化占位符,常见的包括:
perl
%s 字符串
%d 整数
%f 浮点数
%t 布尔值
%v 默认格式
%T 类型
其中 %v 是最常用的,它可以自动匹配变量类型并输出内容,而 %T 则用于调试变量类型。
除了输出到终端,fmt 还可以生成字符串。fmt.Sprintf() 是一个非常重要的函数,它不会打印内容,而是返回格式化后的字符串。
go
msg := fmt.Sprintf("user=%s id=%d", "bob", 1001)
fmt.Println(msg)
输出:
ini
user=bob id=1001
这个函数在构建日志、拼接 SQL、生成 URL 时非常常见。
如果需要写入文件或网络连接,可以使用 fmt.Fprintf(),它允许把输出写入任意实现了 io.Writer 接口的对象。
go
file, _ := os.Create("log.txt")
fmt.Fprintf(file, "log: %s\n", "start")
在调试结构体时,fmt 提供了更强大的格式化能力。例如:
go
type User struct {
Name string
Age int
}
u := User{"Tom", 30}
fmt.Printf("%v\n", u)
fmt.Printf("%+v\n", u)
fmt.Printf("%#v\n", u)
输出分别是:
css
{Tom 30}
{Name:Tom Age:30}
main.User{Name:"Tom", Age:30}
可以看到:
%v 输出值 %+v 带字段名 %#v 输出 Go 语法格式
在调试复杂结构时非常有用。
fmt 还支持对输出格式进行精细控制,例如控制宽度和精度。最常见的就是控制浮点数的小数位数。
go
price := 19.999
fmt.Printf("%.2f\n", price)
输出:
20.00
还可以控制对齐方式:
go
fmt.Printf("%10d\n", 100) // 右对齐
fmt.Printf("%-10d\n", 100) // 左对齐
这种能力在构建表格输出或 CLI 工具时非常实用。
除了输出,fmt 也提供了输入能力。fmt.Scan() 可以从标准输入读取数据。
go
var name string
fmt.Scan(&name)
fmt.Println("hello", name)
用户输入:
Alice
输出:
hello Alice
如果需要按行读取,可以使用 fmt.Scanln();如果需要按格式解析输入,可以使用 fmt.Scanf()。
go
var name string
var age int
fmt.Scanf("%s %d", &name, &age)
输入:
Tom 18
程序会自动解析为两个变量。
在实际开发中,fmt 常见的使用方式包括:打印调试信息、构建日志字符串、生成格式化文本、CLI 输出以及简单的输入处理。虽然在高性能场景中(例如日志系统)可能会用更专业的库替代,但在绝大多数场景下,fmt 已经足够使用。
需要注意的是,fmt 的格式化功能是有一定性能开销的,因为它需要解析格式字符串。如果是在高频调用的性能敏感场景,可以考虑使用字符串拼接或 strconv 来优化。
从整体来看,fmt 是 Go 标准库中最基础也是最重要的工具之一。它统一了输出、格式化和输入处理方式,让开发者可以用简单直观的方式操作数据。无论是初学者还是高级开发者,都会频繁使用这个包。
掌握 fmt 的关键在于熟悉常用函数(Print、Println、Printf、Sprintf)以及格式化占位符。一旦熟练使用,你会发现 Go 的输出与字符串处理会变得非常高效和优雅。