Go输出与格式化核心库:fmt包完整指南

0 阅读4分钟

在 Go 语言中,fmt 是最基础也是使用频率最高的标准库之一。几乎每一个 Go 程序都会用到它,无论是打印调试信息、格式化字符串、构建日志,还是从标准输入读取数据。fmt 的核心作用可以用一句话概括:提供统一、强大的格式化输入输出能力

与很多语言不同,Go 没有复杂的字符串拼接语法,而是通过 fmt 来完成大部分输出和字符串构建工作。这种设计让代码更加清晰,也更容易维护。


在日常开发中,最常用的是输出函数。fmt.Print() 用于直接输出内容,不会自动换行,适合连续拼接输出。

fmt.Print("Hello ")
fmt.Print("Go")

输出结果:

Hello Go

如果希望自动换行,可以使用 fmt.Println()。它不仅会在末尾加换行,还会在多个参数之间自动加空格,这是开发中最常用的打印方式。

fmt.Println("Hello", "Go")

输出:

Hello Go

当需要更精细的控制时,就要使用 fmt.Printf()。这个函数支持格式化字符串,通过占位符控制输出格式。

name := "Alice"
age := 25

fmt.Printf("name: %s age: %d\n", name, age)

输出:

name: Alice age: 25

Printf 的核心是格式化占位符,常见的包括:

%s  字符串
%d  整数
%f  浮点数
%t  布尔值
%v  默认格式
%T  类型

其中 %v 是最常用的,它可以自动匹配变量类型并输出内容,而 %T 则用于调试变量类型。


除了输出到终端,fmt 还可以生成字符串。fmt.Sprintf() 是一个非常重要的函数,它不会打印内容,而是返回格式化后的字符串。

msg := fmt.Sprintf("user=%s id=%d", "bob", 1001)
fmt.Println(msg)

输出:

user=bob id=1001

这个函数在构建日志、拼接 SQL、生成 URL 时非常常见。

如果需要写入文件或网络连接,可以使用 fmt.Fprintf(),它允许把输出写入任意实现了 io.Writer 接口的对象。

file, _ := os.Create("log.txt")
fmt.Fprintf(file, "log: %s\n", "start")

在调试结构体时,fmt 提供了更强大的格式化能力。例如:

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)

输出分别是:

{Tom 30}
{Name:Tom Age:30}
main.User{Name:"Tom", Age:30}

可以看到:

%v 输出值 %+v 带字段名 %#v 输出 Go 语法格式

在调试复杂结构时非常有用。


fmt 还支持对输出格式进行精细控制,例如控制宽度和精度。最常见的就是控制浮点数的小数位数。

price := 19.999
fmt.Printf("%.2f\n", price)

输出:

20.00

还可以控制对齐方式:

fmt.Printf("%10d\n", 100)   // 右对齐
fmt.Printf("%-10d\n", 100)  // 左对齐

这种能力在构建表格输出或 CLI 工具时非常实用。


除了输出,fmt 也提供了输入能力。fmt.Scan() 可以从标准输入读取数据。

var name string
fmt.Scan(&name)

fmt.Println("hello", name)

用户输入:

Alice

输出:

hello Alice

如果需要按行读取,可以使用 fmt.Scanln();如果需要按格式解析输入,可以使用 fmt.Scanf()

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 的输出与字符串处理会变得非常高效和优雅。